div.main {margin-left: 20pt; margin-right: 20pt}LyX и LaTeX: организация взаимодействия. Часть 2 Автор: Алексей
Крюков, basileia@yandex.ru Опубликовано:
26.03.2002 Оригинал: http://www.softerra.ru/freeos/16959/
Настройка взаимодействия с LaTeX
Наконец, настала очередь наиболее интересной для
нас группы настроек, непосредственно определяющих внешний вид документа при
выводе на печать. Говорят, некогда существовал специальный «патч для
кириллической печати», без которого использование LyX было затруднено. Однако мы
знаем, что сам LyX ничего не печатает, и даже не готовит предназначенный для
печати PostScript-файл: его задача заключается лишь в том, чтобы передать
компилятору LaTeX требуемые данные. При этом главную роль играют параметры
документа, сосредоточенные в его преамбуле. Так вот, ныне LyX научился вполне
удовлетворительно составлять преамбулу LaTeX для документов на любом языке. О
том, как это происходит, и пойдет сейчас речь.
Основное назначение преамбулы LaTeX – загрузка
различных пакетов, которые в дальнейшем понадобятся при оформлении текста.
Естественно, пакетов этих может быть очень много, и список их надлежит
определять для каждого конкретного случая. Однако существует несколько основных
элементов, которые ныне являются практически обязательными для правильно
оформленного документа LaTeX:
Необязательным, но распространенным элементом
преамбулы является также загрузка
пакетов, отвечающих за поддержку нестандартных шрифтов.
В LyX часть перечисленных параметров задается
глобально, а часть – для конкретного документа (для этого существует диалог
«Формат документа», вызываемый через меню «Layout»). И лишь показатель основного
языка текста можно указать дважды: в диалоге «Формат документа» и в диалоге
«Preferences...» в качестве глобального умолчания. Разумеется, имеет смысл раз и
навсегда установить значение russian, чтобы не делать этого при создании каждого
нового файла.
Загрузка пакета fontenc
Пакет fontenc предназначен для указания
внутренней кодировки шрифта TeX, которую надлежит использовать при компиляции
документа, и загружается строкой вида usepackage[(список кодировок)]{fontenc}
«Переходником» к загрузке данного пакета в LyX
служит параметр font_encoding, который можно задать либо вручную в
конфигурационном файле, либо через поле «TeX encoding», расположенное в диалоге
«Preferences…» (вкладка «Outputs», на ней вкладка «Другие»). Любопытно, что
создатели LyX не только вынесли сей параметр в глобальные настройки программы
(полагая, очевидно, что у пользователя не возникнет потребности в его частом
изменении), но и «спрятали» его на вкладке, не имеющей отношения к установкам
языкового окружения. По умолчанию предлагается использовать кодировку T1,
которая ныне является стандартом для языков Западной Европы. Можно (но не
рекомендуется) установить font_encoding в «default» – в этом случае пакет
fontenc не загрузится вообще, и LaTeX будет использовать устаревшую 7-битную
кодировку OT1. Существования кириллических кодировок авторы не предусмотрели,
однако использовать их не составит труда, поскольку сам LyX не интересуется
значением font_encoding, а только передает его пакету fontenc.
Возможно, у читателя возникнет недоумение: зачем
понадобилось создавать специальные кодировки для TeX, когда изобилие
существующих кодовых страниц и так служит источником неразберихи. Дело
заключается в том, что система TeX по традиции предъявляет определенные
требования к своим шрифтам. Например, в них должны быть латинские лигатуры и
полный набор акцентов-модификаторов, причем всё это хозяйство обычно размещается
в таблице символов в диапазоне 0–32 (на использование данной области в TeX не
существует запрета, поскольку нет и потребности в управляющих кодах). Есть свои
предпочтения по отношению к типографским символам: некоторые из них непременно
должны присутствовать в таблице, другие же выносятся в специальные символьные
шрифты. Освободившееся место используется для дополнительных букв, в результате
чего, например, кодировка T1, хотя она и основана на западноевропейской кодовой
странице iso-8859-1, фактически включает также и символы центральноевропейского
набора.
С этими требованиями и должны сообразовываться
кодировки TeX для кириллицы. Таковых существует несколько. Особенно хотелось бы
предостеречь от использования кодировки LCY, основанной на cp866. Еще недавно
эта кодировка была фактическим стандартом для постсоветского пространства.
Однако ныне на смену ей пришла серия кодировок T2, существующая в трех ипостасях
(T2A, T2B, T2C). Все три кодировки совместимы между собой и с cp1251, на которой
основаны; различие же их заключается в средней области таблицы (128–191). В T2A
здесь размещены символы славянских алфавитов из cp1251, сдобренные «азиатской
кириллицей», в то время как в других двух кодировках «азиатская кириллица»
царствует безраздельно. Существует также «идеологически чистая», но весьма
громоздкая кодировка X2, которая включает все кириллические буквы из кодировок
серии T2 (а также символы старой орфографии), но зато не содержит латинского
алфавита.
Из сказанного вытекает, что наиболее
целесообразным в большинстве случаев является использование кодировки T2A. Она и
в самом деле по умолчанию загружается пакетом поддержки русского языка (о
котором речь ниже) в том случае, если ни одна из кириллических кодировок не
упомянута в опциях пакета fontenc. Так что исходное значение параметра
font_encoding, собственно говоря, можно оставить без изменений. Однако же явное
указание кодировок является одним из признаков хорошего тона при работе с LaTeX,
поэтому не будет ошибкой заменить T1 на T2A. Впрочем, правильнее всего будет
передать пакету fontenc сразу два значения, разделив их запятой, например: font_encoding "T1,T2A"
Такое решение следует настоятельно рекомендовать
тем пользователям, которым приходится включать в свои документы фрагменты текста
на западноевропейских языках. Абсолютно необходимым оно будет также в том
случае, если для кириллицы используется кодировка, не содержащая латинского
алфавита (как X2).
Загрузка пакета inputenc
Пакет inputenc служит для указания кодовой
страницы исходного файла и загружается командой usepackage[(список кодировок)]{inputenc}
Нечего и говорить, сколь важен данный пакет для
русскоязычных пользователей: именно он (в паре с fontenc) дает возможность
одинаково успешно пропускать через компилятор LaTeX файлы, подготовленные в
различных операционных системах и при различных установках кодовой страницы.
В отличие от внутренней кодировки TeX, кодировка
исходного файла задается в LyX для каждого документа отдельно. Для этой цели
нужно открыть вкладку «Язык» диалогового окна «Формат документа». На ней
обнаруживаем раскрывающийся список «Language» (естественно, надо убедиться, что
его значение выставлено правильно, иначе дальнейшее не имеет смысла). Ну а чуть
ниже как раз и расположен другой список, под названием «Кодировка». В общем-то,
на его содержание грех жаловаться (налицо все кодировки кириллицы), однако же
нельзя не удивиться тому, что данный список жестко задан в ресурсах
соответствующего диалога, и, соответственно, способа пополнить его не
существует. Ведь со стороны авторов по меньшей мере наивно было бы предполагать,
что они в состоянии предусмотреть все кодовые страницы, с которыми могут
пожелать работать пользователи.
С другой стороны, понятно, почему названия
кодировок нельзя было взять из системы. Дело в том, что опции пакета inputenc
суть не что иное, как названия совершенно определенных файлов (они имеют
расширение .def), которые должны подчиняться соглашению 8.3 ради сохранения
совместимости с версиями TeX для других платформ. Поэтому длинные имена вроде
«microsoft-cp1251.def» (и даже «iso-8859-5.def») были бы здесь неприемлемы.
Однако же следовало хотя бы предоставить пользователю возможность ввести
требуемое имя кодировки вручную.
Впрочем, вместо явного задания входной кодировки
можно выбрать в списке опцию «auto» (а именно она выставлена там по умолчанию).
Тогда LyX сам подберет кодировку, исходя из выбранного языка документа и
руководствуясь при этом своей базой данных, которая хранится в файле languages в
его программном каталоге. Только следует иметь в виду, что при использовании
«автоматического» режима LyX загрузит соответствующие входные кодировки не
только для основного языка документа, но и вообще для всех языков, встретившихся
в нем. И, соответственно, входная кодировка будет динамически переключаться в
разных местах на протяжении документа. Пользы от этого, впрочем, мало по уже
упомянутой причине: нет возможности заодно менять и кодовую страницу экранного
шрифта. Если же вы всё-таки хотите воспользоваться этой возможностью, то файл
languages придется предварительно отредактировать, поскольку кодировки в нем по
необъяснимой причине приведены под общепринятыми именами, а не под
«псевдонимами», понятными LaTeX. В противном случае компилятор сможет нормально
воспринимать чисто русские документы в koi8-r, но непременно споткнется на
названиях латинских кодовых страниц серии iso-8859.
Наконец, в списке кодировок можно выбрать опцию
«default». В этом случае пакет inputenc не загрузится вообще, и, соответственно,
никакой перекодировки исходного файла при его компиляции осуществляться не
будет. Данный номер пройдет безнаказанно только для русского (но не
украинского!) текста в cp1251, поскольку именно на ней основана серия кодировок
T2. Однако в любом случае пренебрежение необходимостью явно указывать входную
кодировку следует считать признаком дурного тона.
Чтобы закончить разговор о о диалоге «Формат
документа» и его вкладке «Язык», упомянем о том, что на ней имеется также группа
опций «Quote style» (то есть «Стиль кавычек»). LyX, как и всякий уважающий себя
текстовый процессор, умеет автоматически расставлять парные кавычки при наборе
текста. Так вот, правила русской пунктуации требуют использовать двойные
кавычки-«елочки», то есть кавычки французского стиля, именуемые в международной
терминологии guillemots. Именно их и надлежит выбрать в раскрывающемся списке.
Не смущайтесь даже в том случае, если вместо нужных символов увидите в нем
вопросительные знаки (а если ваша основная кодировка – koi8, то ничего другого
вы и не увидите, потому что типографские знаки препинания отсутствуют в ней как
класс). Всё равно в тексте документа кавычки будут отображаться в виде двойных
угловых скобок, как это и принято в исходниках LaTeX. Ну а в откомпилированном
для печати файле они примут нормальный вид.
Загрузка пакета многоязыковой
поддержки
Мне уже приходилось несколько раз упоминать о
таком показателе, как язык документа. Настала пора рассказать о том, для чего он
требуется LyX. Ведь не для проверки же орфографии: реализация этой последней в
LyX не имеет никакого отношения к его взаимодействию с LaTeX. Однако правильная
установка языка совершенно необходима хотя бы для правильного выбора внутренней
кодировки: ведь, загрузив список кодировок в опциях пакета fontenc, мы еще не
указали, к какой части документа надлежит применить каждую из них. Это как раз и
должны сделать пакеты поддержки соответствующих языков. Но самое главное их
назначение заключается в том, чтобы дать LaTeX указание использовать надлежащий
алгоритм переноса. Кстати говоря, чтобы LaTeX мог осуществлять перенос слов на
русском языке (равно как и на любом другом), его надлежит определенным образом
сконфигурировать. Как это сделать – читайте в руководствах по LaTeX: LyX к
данной процедуре не имеет никакого отношения, и, соответственно, ее нет
возможности обсуждать в рамках посвященной ему статьи.
Но предположим, что этот этап благополучно
минул. Тогда наша задача состоит в том, чтобы дать знать LyX, какой синтаксис
использовать для загрузки поддержки требуемых языков. Делается это в диалоге
«Preferences…» на вкладке «Lang Opts» (на ней вкладка второго уровня «Язык»).
Наиболее важным здесь является поле под названием «Package». Еще сравнительно
недавно поддержка русского языка в LaTeX обеспечивалась за счет загрузки
различных версий пакета russian, не имевших ничего общего, кроме названия.
Соответственно, в поле «Package» нам пришлось бы прописать что-то вроде
usepackage{russian}. Далее на вкладке имеются поля «Command start» и «Command
end» для указания команд, которые должны отмечать начало и конец блока на том
или ином языке. В данном случае они, скорее всего, приняли бы вид begin{$$lang}
и end{$$lang}, где вместо $$lang программа подставляла бы значения «russian» и
«english». Кроме того, возможно, пришлось бы пометить флажки «Auto begin» и
«Auto finish», чтобы команды begin{russian} и end{russian} автоматически
вставлялись в начало и конец документа LaTeX.
Ныне же в стандартную поставку LaTeX входит
пакет babel, обеспечивающий поддержку всех европейских языков, включая и
русский. Именно этот пакет по умолчанию используется LyX, и потому нам нет
причин отвергать предлагаемые им установки: команда загрузки пакета –
usepackage{babel}, команда переключения языков – selectlanguage{$$lang}.
Следует отметить лишь одну тонкость: стандартный синтаксис загрузки пакета babel
предусматривает включение списка требуемых языков в качестве опций. Например,
так: usepackage[english,german,russian]{babel}
Однако babel в состоянии воспринимать и названия
языков, указанных еще до его загрузки в числе глобальных параметров документа.
LyX поступает с ними именно так, чем и объясняется предлагаемая по умолчанию
загрузка пакета babel без всяких опций. В качестве основного babel использует
тот язык, который был загружен последним, и LyX прекрасно об
этом знает, так что в активизации опций «Auto begin» и «Auto end» нет
необходимости.
В ходе работы над текстом показатель языка можно
устанавливать и изменять через диалоговое окно «Стиль символов». Список
доступных языков достаточно обширен и, кроме того, его можно дополнить, так как
берется он всё из того же файла languages. Естественно, надо убедиться, что
нужный вам язык действительно поддерживается пакетом babel. LyX выделяет на
экране фрагменты текста на иностранном (то есть не совпадающем с основным для
данного документа) языке, подчеркивая их синей линией. Данный режим можно и
отключить, но лучше этого не делать: представьте-ка себе, что может получиться
на печати, если вы по ошибке пометили русский текст как английский, да еще и
забыли об этом. Обратное же обычно допустимо, так как большинство кириллических
кодировок содержит и латинские буквы. Тем не менее, явное указание показателя
языка (хотя бы для фрагментов длиной в несколько строчек) считается признаком
хорошего тона. И последнее: для часто используемых языков имеет смысл назначить
горячие клавиши, например: bind "F11" "language russian"
bind "F12" "language english"
Как и многие другие, эти команды могут быть
помещены в конфигурационных файлах LyX, но наиболее подходящее для них место –
пользовательский bind-файл. Ну а LyX в процессе генерации документа LaTeX
обязательно проверит файл на предмет использованных языков и приведет их список
в преамбуле.
Шрифтовое оформление документа
Как известно, по умолчанию в TeX используется
семейство шрифтов Computer Modern в собственном формате METAFONT. И хотя эти
шрифты не только существуют во всех требуемых кодировках, но и обладают вполне
приличными эстетическими качествами, всякое однообразие со временем приедается.
К тому же при всех достоинствах технологии METAFONT приходится считаться с тем
обстоятельством, что подготовленный с использованием шрифтов в этом формате
postscript-файл нельзя будет распечатать на компьютере, где отсутствует TeX.
Поэтому всякий пользователь LyX, вероятно, рано
или поздно обратит внимание на вкладку «Документ» в диалоговом окне «Формат
документа», где в числе прочих опций имеется и раскрывающийся список «Шрифты»,
предназначенный для выбора основной текстовой гарнитуры. Так вот: к сожалению,
надлежит знать, что для русскоязычного пользователя данный список
бесполезен. Перечисленные в нем шрифты соответствуют пакетам из
стандартной коллекции psnfss, которая обеспечивает поддержку некоего малого
джентльменского набора гарнитур Type 1, прилагаемых к любому
PostScript-принтеру. Естественно, все эти гарнитуры не содержат символов
кириллицы, и потому при попытке их загрузки LaTeX просто выдаст предупреждение
об отсутствии шрифта в требуемой кодировке, после чего переключится на
стандартный Computer Modern.
Замечу, что дополнить список шрифтов нельзя: он,
как и в случае с выбором входной кодировки, жестко задан в ресурсах диалога. И,
в общем-то, это понятно: всё равно программа не смогла бы среди сотен пакетов
LaTeX самостоятельно найти именно те, которые ведают загрузкой шрифтов. Но хоть
бы предоставили пользователю возможность ввести требуемое название вручную: ведь
всё, что требуется, это передать системе LaTeX имя пакета, подлежащего загрузке.
Впрочем, это не исключает возможности использования нестандартных гарнитур, а
только слегка ее затрудняет.
Правда, готовых шрифтовых пакетов для TeX с
поддержкой кириллицы весьма и весьма немного. Самостоятельное же их изготовление
представляет собой дело хотя и возможное, но достаточно нетривиальное и
требующее определенных познаний. Ну а те пакеты, которые доступны в Сети, по
большей части либо сделаны непрофессионально, либо вызывают сомнения с точки
зрения соблюдения авторских прав. Практически единственным безупречным во всех
отношениях является пакет literat, позволяющий использовать для оформления
текстов гарнитуру «Литературная» производства фирмы Paratype. Так вот, если мы
установим этот пакет и пожелаем использовать его в LyX, единственным выходом из
положения будет прямое редактирование преамбулы LaTeX. Для этого из меню
«Layout» вызываем диалог «LaTeX-преамбула», в котором и пишем: usepackage{literat}
После чего можем наслаждаться видом нового
шрифта при просмотре DVI и на печати.
Несколько слов о KLyX
Как известно, наряду с оригинальным LyX
существует и его модификация, основанная на библиотеке Qt. Которая, возможно,
кое-кому покажется более привлекательной, прежде всего потому, что красивые
панели инструментов в стиле KDE весьма выигрышно смотрятся на фоне спартанского
интерфейса оригинального LyX. С другой стороны, KDE как среда предъявляет
определенные требования к ориентированным на нее приложениям, и эти требования
не всегда вяжутся с такими, например, особенностями идеологии LyX, как
необходимость настраивать поведение клавиатуры. А уж настройка программы
реализована и вовсе замысловато. С одной стороны, здесь нельзя обойтись без
ручного редактирования файла lyxrc. С другой же – KLyX, как и всякое уважающее
себя KDE-приложение, имеет специальный инициализационный файл в каталоге ~/.kde,
в который и заносит все настройки, заданные в интерактивном режиме. А поскольку
файлы эти, будучи несовместимыми по синтаксису, в ряде случаев служат для
регулирования одних и тех же параметров, то просто невозможно представить, чтобы
их сосуществование не приводило к конфликтам.
Но заключается ли дело в идеологической
несовместимости с KDE, или в чем-то ином, а только очень похоже на то, что KLyX
так и остался всего лишь экспериментом, который не стали доводить до ума. Во
всяком случае, не обновлялся он очень давно, и застрял на версии 0.12
(сравним-ка с номером текущей версии LyX). И действительно, программа отражает
довольно архаический этап развития LyX. Сильнее всего в ней хромает
многоязыковая поддержка. Правда, KLyX знает о пакете babel, но и только:
переключать язык по ходу документа нельзя. В его каталоге нет базы данных
languages, и, соответственно, нет режима «auto» для установки входной кодировки.
А, между прочим, он очень бы пригодился, потому что список доступных значений
этого параметра ограничивается двумя-тремя латинскими кодовыми страницами. Вот
тут, пожалуй, и в самом деле не обойтись без «патча для кириллической печати»,
смысл которого свелся бы к добавлению пары строчек в ресурсы соответствующего
диалога.
Но самая главная проблема заключается в другом.
Всё, что мы говорили о способности генерировать удобочитаемый LaTeX-код, к KLyX
не относится. Созданные им файлы LaTeX в точности повторяют все особенности
исходного языка разметки LyX, вплоть до того, что чуть ли не каждое слово в них
начинается с новой строки. И вот с этим мириться уже никак нельзя. Ибо для
каждого пользователя наверняка рано или поздно настанет момент, когда
возможности оформления документа, предоставляемые LyX, покажутся ему
недостаточными. И тогда отправной точкой для дальнейшей работы с LaTeX станут
именно файлы *.tex, образовавшиеся в качестве промежуточного этапа при выводе на
печать. И если привычка к работе с LyX позволит пользователю миновать этот этап
без особых затруднений, то, вероятно, свою задачу сможет счесть выполненной не
только автор этой статьи, но и команда разработчиков LyX.
|