Показаны сообщения с ярлыком русский язык. Показать все сообщения
Показаны сообщения с ярлыком русский язык. Показать все сообщения

20090526

Twtrize — сократитель речи

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

Люди иногда сознательно сокращают слова, набирая SMS или твиты — чтобы потратить меньше денег или укоротить сообщение.

Идея возникла, когда на одном из многочисленных «сократителей URL» я увидел надпись «Shrink text». И мне пришло в голову, что вот он возьмёт, и сократит сам текст: выдаст что-нибудь вроде «shrnk txt». Конечно, сервис всего лишь заменял в тексте URL, но я подумал, что можно было бы сокращать и сам текст.

Не знаю, как в английском, а в русском, по-моему, можно убрать довольно много гласных букв, а текст будет по-прежнему читаться. Я решил испытать идею, и написал этот сократитель.

Программа преобразует текст на русском языке, выкидывая из него некоторые буквы и символы. Прошу рассматривать это как забавную игрушку и программой не злоупотреблять.

Зависимости


Программа написана на Literate Haskell (это значит, что то, что, вы сейчас читаете, и есть программа!). Используются следующие модули:
> import System.IO.UTF8 as U
> import Data.Char (toLower)
> import Text.Regex.Posix ((=~))
> import Data.Char (isPunctuation)

TODO: Я использую старый способ работать с UTF-8 (utf8-string), надо переделать под новую библиотеку text.

Алгоритм


Данная программа «сжимает» русский текст так:
I. Из слов убираются (почти) все гласные и мягкие знаки,
> filterVowels = filter (`notElem` (aVowels ++ jVowels))

Неприкосновенны гласные, которые:
I.a. являютя частью приставки «не-»
> rmVowels = map wordFilter
> where
> wordFilter ('н':'е':cs) = "не" ++ wordFilter cs

I.b. стоят в трёх- и менее -буквенных словах
>    wordFilter w = if length w <= 3
> then w

I.c. стоят в начале или конце слова
>                    else
> let (prefix,inner,ending) = splitWord w
> in prefix ++ (ajaFilter inner) ++ ending

>    splitWord s  = let p = takeWhile dontRemove s
> r = drop (length p) s
> e = reverse $ takeWhile dontRemove $ reverse r
> m = take ((length r) - (length e)) r
> dontRemove c = c `elem` vowels || isPunctuation c
> in (p,m,e)

I.d. являются комбинациями со звуком «й»: «-ою-», «-ая—» и проч.
>    ajaFilter [] = []
> ajaFilter s = let (b,m,a) = s =~ diftPat :: (String,String,String)
> diftPat = "[" ++ vowels ++ "][" ++ jVowels ++ "]"
> in (sameConsFilter b) ++ m ++ (ajaFilter a)

I.e. стоят меж двух одинаковых согласных
>    sameConsFilter [] = []
> sameConsFilter s =
> let (b,m,a) = s =~ sameConsPat :: (String,String,String)
> sameConsPat = "(["++consonants++"])[" ++ vowels ++ "]\\1"
> in (filterVowels b) ++ m ++ (sameConsFilter a)

Программа использует такой список гласных:
> vowels = aVowels ++ jVowels

где есть и простые гласные (к ним же причислен и мягкий знак)
> aVowels = "аиоуыэь"

и дифтонгообразующие (не знаю правильного термина — в общем, дающие звук «й»),
к ним же причислена и буква «й»:
> jVowels = "яйёюе"

Для некоторых правил требуется также список русских согласных:
> consonants = "бвгджзклмнпрстфхцчшщ"

II. из предложений убираются знаки препинания, кроме точек, вопросительных и восклицательных знаков
> rmSomePunctuation = filter (not . null) . map rmTrailing
> where rmTrailing = reverse . rmHead . reverse
> rmHead [] = []
> rmHead s@(c:cs) = case c `elem` rmlist of
> True -> rmHead cs
> False -> s

Список подлежащих удалению знаков препинания:
>         rmlist = ",;-—:–"

III. из текста удаляются некоторые предлоги (в телеграфном стиле)
> rmPrepositions = filter (`notElem` preps) . words
> where preps = [ "в", "во", "на", "над", "к", "от", "из"
> , "по", "под", "через" ]

IV. для пущей стилизации текст пишется в нижнем регистре
> tolower = map toLower


Использование программы


Программу можно использовать как простой unix-фильтр: он читает текст из потока stdin и печает «сжатый» текст в стандартный вывод (stdout).
> main = U.interact $ (++ "\n") . twtrize

> twtrize = unwords . filter ( not . null ) .
> rmVowels . rmSomePunctuation . rmPrepositions . tolower

Пример:
    $ printf "Гласные, а также некоторые предлоги — как, например, «на», — из \
текста удаляются, но какие-то остаются.\n" | runhaskell twtrize.lhs

глсные а ткже нектрые прдлги как нпрмр «на» ткста удляются но какие-то
остаются.


Последняя версия: исходник здесь. Лицензия: BSD-3.

20090404

gettext для Хаскеля

Василь Пастернак написал Haskell-интерфейс для gettext (библиотека для перевода программ на разные языки — интернационализации, как теперь говорят пишут).

Я хочу дать ссылки на пару его заметок:
Заметки написаны по-английски, но там, в основном, примеры кода, так что разобраться будет нетрудно.

Также: hgettext в HackageDB.

20090403

Русские буквы в matplotlib/pylab

Усилиями некого Алексея сегодня мы все наконец узнали как в Matplotlib/Pylab делать подписи по-русски. Вот работающий пример:
#!/usr/bin/env pytnon
# vim: set fileencoding=utf-8 ts=4 sw=4 expandtab:

# Cyrillic letters in Matplotlib,
# thanks to Alexey for solution, see http://koldunov.net/?p=290#comments
from matplotlib import rc
rc('font',**{'family':'serif'})
rc('text', usetex=True)
rc('text.latex',unicode=True)
rc('text.latex',preamble='\usepackage[utf8]{inputenc}')
rc('text.latex',preamble='\usepackage[russian]{babel}')

from pylab import *

def figsize(wcm,hcm): figure(figsize=(wcm/2.54,hcm/2.54))
figsize(13,9)

x = linspace(0,2*pi,100)
y = sin(x)
plot(x,y,'-')
xlabel(u"ось абсцисс")
ylabel(u"ось ординат")
title(u"Две беды в России — синусы и косинусы!")
savefig('rus-mpl.pdf')
И вот результат:



По теме:
Matplotlib. Простые вещи — 1
Matplotlib. Простые вещи — 2
Как построить график с изолиниями в gnuplot, gri и pylab
Короткие «рецепты» по применению Python в околонаучных целях

PS. Как, кстати, лучше PDF в растр конвертировать? Я делаю так:
$ pdftoppm -r 300 image.pdf | convert ppm:- image.png
Дополнение: ещё лучше вариант предложил Дмитрий Душкин:
from matplotlib import rc
font = {'family': 'Droid Sans',
        'weight': 'normal',
        'size': 14}
И всё отлично работает.

20090226

Церковно-славянский в Linux

Любопытствовал, как можно на компьютере работать с церковно-славянским текстом. В частности, в линуксе. И немало для себя сделал открытий. В частности,

а. Уникод для записи церковно-славянского текста пока ещё не вполне приспособлен, и вот почему. Хотя в будущем уникод обещает стать лучше.

в. За отстутствием «официальной» кодировки, была предпринята (видимо, удачная) попытка сделать единую кодировку для ЦС. Так и назвали, единой церковно-славянской, UCS. Она достаточно подробно описана здесь.

г. Свободно-распространяемые шрифты для кодировки UCS имеются. Для начала можно поставить Triodion, именно его многие сайты указывают в своих стилях. (В современном линуксе для установки шрифта как правило достаточно поместить все его файлы в ~/.fonts/)

д. Кодировка и шрифты решают проблему представления текста, но не решают проблему набора. А для набора было придумано «инвариантное представление церковно-славянского текста», HIP. Простыми словами: это основаный на простом тексте «легковесный» язык разметки, вроде Markdown, только адаптированный именно под набора ЦС и смешанных текстов. Например, буква «ѣ» набирается как «», «фита» как «f», «от» как «w\т». Разнообразные тексты в разметке HIP общедоступны, но полноценного конвертера для Linux я не нашёл. Зато есть онлайн-конвертер. И спецификации :)

е. Однако конвертер, может быть, и не нужен, если речь идёт о вёрстке текста. Есть как минимум два пакета для LaTeX, позволяющие набирать текст прямо в разметке HIP. Исторически первый из них — hiptex Александра Воинова. Позднее появился CSLTeX Алексея Вихлинина (кстати, он физтех!). Кажется, CSLTeX лучше, чем его предшественник hiptex.

Получается, всё, что нужно, уже есть. И чтобы на экране читать, и чтобы набирать, и чтобы верстать и красиво печатать.

Вот такие дела. Признаюсь сразу, что в этом вопросе я полный профан, но было интересно немного вникнуть. Из любви к прекрасному. Кстати, многое о церковно-славянском языке можно узнать из книжки Плетневой и Кравецкого (можно скачать в формате DjVu).

20081226

Русский BibTeX и XeLaTeX

К заметке о шрифтах OpenType в XeLaTeX добавляю примеры совместного использования русского языка, BibTeX и XeLaTeX, как вместе с babel, так и вместе с polyglossia; смотрите PDF и его исходник.
Внимание: всё нижеследующее относится к использованию XeLaTeX, а не обычного, проверенного временем LaTeX.
Стандартное средство для работы с библиографией в LaTeX — BibTeX. Стандартное средство для «русификации» (включения нужных правил переноса, названий разделов, определённых типографических норм) — пакет babel. Однако ни BibTeX, ни babel не умеют работать с уникодом. В результате при попытке использования этих средств в XeLaTeX могут быть проблемы. В частности, проблемы возникают при попытке использовать их одновременно: при наборе русских текстов с русской библиографией.

Первое, не очень красивое решение: использовать по-прежнему babel, но подставлять костыли, переопределяющие русские символы. Второе решение: перейти от babel к использованию более современного пакета polyglossia.

Итак, предположим, что и документ, и библиография (bib-файл) набраны в уникоде (UTF-8) и содержат кириллические символы. Дальше есть два пути.

При использовании babel в каталог с документом необходимо положить xecyr.sty, а в преамбуле поместить примерно такой код:
\usepackage[cm-default]{fontspec} % or install lmodern
\usepackage{xltxtra} % load xunicode
\usepackage[russian]{babel}
\usepackage{xecyr}
Компилировать с помощью xelatex, запуская bibtex как обычно.

Для использования polyglossia нужно установить пакеты etoolbox и polyglossia. Можно просто поместить файлы etoolbox.sty, polyglossia.ins и polyglossia.dtx из этих пакетов в каталог с документом и выполнить
$ latex polyglossia.ins
а в преамбулу документа добавить примерно такой код:
\usepackage[cm-default]{fontspec} % or install lmodern
\usepackage{xltxtra} % load xunicode
\usepackage[russian]{polyglossia}
polyglossia довольно похожа на babel но имеет некоторые отличия. Чтобы переопределить название стандартного заголовка, например, списка литературы, можно использовать команду
\gappto\captionsrussian{\renewcommand{\refname}{Мои ссылки}}


P.S. Также дополнил предыдущую заметку о XeLaTeX примером, как обеспечить одинаковый рост строчных букв разных гарнитур.

20081206

Диссертация в LaTeX

Мой коллега-блоггер Миша Конник задумал титанический труд на тему «Как написать диплом в LaTeX». Который по задумке должен стать циклом статей, охватывающий вопросы от установки до вёрстки в LaTeX. Некоторые статьи уже готовы. Кстати, один подобный цикл статей, но более общего характера, уже существует.

Мне лично представляется, что при такой широте охвата материала работа эта необъятная. И если это будет коллективная работа, то место ей в Викиучебниках. Особенно в том, что касается вёрстки в LaTeX. Слишком много возможностей, слишком разные у всех задачи и тексты. Вопросы же установки и настройки во многом зависят от используемой ОС и используемого дистрибутива LaTeX. Остаются вопросы специфичные для написания именно диплома (или подобных работ: курсовых, диссертаций, отчётов). Я же в своём блоге стараюсь разрешать конкретные, частные вопросы.

В этой заметке я поделюсь кое-каким опытом написания кандидатской диссертации в LaTeX. Многое пригодится и тем, кто пишет дипломы. Писал я её три года назад, пользовался тогда teTeX (теперь TeXLive). Однако почти всё должно работать и сейчас. Во всяком случае, мой исходник по-прежнему компилируется PDFLaTeX. Об использовании русского языка в PDFLaTeX см. эту заметку. Не утверждаю, что всё сделал правильно или наилучшим образом. Очень может быть, что для ряда задач появились с тех пор лучшие решения.

Оставлю также в стороне нетехнические вопросы: что писать, как писать и как организовать работу. Вот тут есть некоторые рекомендации (на английском), многое применимо и в отечественных условиях.

Из технических вопросов, можно выделить:
  1. Вопросы соответствия требованиям по оформлению работы (как правило, они определяют используемый шрифт, макет страницы, отступы, порядок нумерации объектов, страниц, формат подписей, макет титульной страницы); тут лучше положиться на советы своего научного руководителя.
    В случае диссертаций, в соответствии с Положением о порядке присуждения ученых степеней, утверждены формы титульных листов диссертации и автореферата, а оформление диссертации «должно соответствовать требованиям, устанавливаемым Министерством образования Российской Федерации»
  2. Вопросы соответствия нормам отечественной полиграфии (не секрет, что ЛаТэХ по-умолчанию набирает «по-американски», в том числе формулы и математику), тут для начала можно посмотреть примеры правильного набора у К. Воронцова; вот некоторые из отличий:
    1. кавычки у нас используются французские или немецкие;
    2. иначе набирается тире (во всех случаях);
    3. отличается ряд математических символов, например, знаки нестрогих неравенств;
    4. используется другое начертание греческих букв;
    5. отличаются обозначения ряда функций и ряд других математических обозначений;
    6. знак «равно» дублируется при разрыве формулы на две строки;
    7. первый абзац набирается тоже с отступом;

  3. Оформление списка литературы регламентируется соответствующими ГОСТами. С 2009-го года, кстати, вступает в действие новый ГОСТ Р 7.0.5-2008. Думаю, обновлённые стили BiBTeX скоро появятся.
Лирическое отступление. Эта статья написана для блога советы.блогспот.ком и распространяется на условиях лицензии CC-BY-NC-SA 3.0, т. е. требует ссылки на оригинал и запрещает коммерческое использование текста.
В своей работе я использовал класс документа dissert.cls. Теперь его первоисточник что-то не находится, так что выкладываю ту версию, которую использовал сам. Однако очень может быть, что класс rusthesis.cls и лучше. Я его не пробовал. Есть ещё пакет disser, который служит тем же целям. Его я тоже не пробовал.

В плане размера шрифтов, межстрочного интервала* и полей я полагался на настройки пакета dissert.cls. Однако эти вещи легко настраиваются и вручную, см. заметки изменение межстрочного интервала в LaTeX и как задать поля страницы в LaTeX.
*) Да, я считаю, что полуторный, а тем более двойной, интервал — это некрасиво, разве что удобно, чтобы делать правки на бумаге. Однако таков жанр.
Набирал текст я в кодировке CP1251, в основном с расчётом на то, чтобы в процессе работы можно было спокойно давать исходник пользователям Windows. Однако это практически не потребовалось.
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
\usepackage[T2A]{fontenc}
Также я пользовался пакетом шрифтов pscyr, пользоваться которым я, однако, не рекомендую, по причине неясной лицензии на распространение этих шрифтов. К счастью, свободно-распространяемых шрифтов с тех пор прибавилось.

Переопределение формата нумерации в списке литературы:
\makeatletter
\renewcommand\@biblabel[1]{#1.}
\makeatother
Надпись «Стр.» над номерами страниц в таблице с оглавлением (только для класса документа dissert.cls):
\renewcommand\contentsdesc{Стр.}
Первый абзац с отступом:
\usepackage{indentfirst}
Далее, я переопределял формат подписей под иллюстрациями:
%different caption style: ``Fig.~N.~Caption text''
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1.~#2}%
\ifdim \wd\@tempboxa >\hsize
#1.~#2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother
Также я использовал пакет hangcaption, чтобы обеспечить «висящие» номера иллюстраций. Это выглядело примерно так:

________________
,́ `.
| |
| @}---,--`-- |
| |
`.________________,'


Рис. 1.1. Что значит имя? Роза пахнет розой,
хоть розой назови её, хоть нет.
Я также включал макрос \reversemarginpar, поскольку широким в диссертации является именно левое поле.

Для организации иллюстраций несколько в одной я использовал пакет subfigure. Соответственно, чтобы включить нумерацию внутренних элементов иллюстрации русскими буквами («Рис. 3.14 (д)»):
\renewcommand{\thesubfigure}{(\asbuk{subfigure})~}
Я опущу все макросы, касающиеся набора математики. С высокой вероятностью, у моих читателей они будут другие.

Шаблон же основной части документа у меня был такой:
\begin{document}

\tableofcontents
\clearpage

\include{intro}
\clearpage

\include{ch02}
\clearpage

\include{ch03}
\clearpage

\chapter*{Заключение}
\addcontentsline{toc}{chapter}{Заключение}
Текст заключения.
\clearpage

\listoffigures
\addcontentsline{toc}{chapter}{Список иллюстраций}
\clearpage

\listoftables
\addcontentsline{toc}{chapter}{Список таблиц}
\clearpage

\renewcommand{\bibname}{Список использованных источников}
\addcontentsline{toc}{chapter}{Список использованных источников}
\bibliographystyle{gost71u}
\bibliography{thesis}
\end{document}
Как можно заметить, я вынес все главы в отдельные файлы (вообще, такой подход можно рекомендовать для набора любых больших документов). Правильные заголовки всяких «списков» в оглавление вносил вручную (команды \addcontentsline). Ещё изменил название списка литературы. А формат списка литературы определил с помощью стиля BiBTeX gost71. В случае, если это не годится, можно создать собственный стиль BiBTeX.

В будущем, возможно, я дополню эту заметку особенностями набора математики (пока можно обратиться к примерам К. Воронцова), некоторыми особенностями набора автореферата (который набирается на формате A5) и шаблоном титульного листа.

Хотя этот текст распространяется, как обычно в моём блоге, по лицензии CC-BY-NC-SA (т.е. со ссылкой на советы.блогспот.ком и не для коммерческого использования), но если кто-то хочет использовать его в Викиучебниках или других проектах Wikimedia Foundation, то в этом случае можно распространять на условиях GFDL.

Дополнение 2009-10-18: нашёл ещё серию статей Павла Самолысова «Верстаем диплом в LaTeX». Может кому пригодится.

20080207

Как задавать произвольные Compose-последовательности

Я уже писал о том, как с помощью клавиши Compose набирать диакритику (символы с акцентами), типографские кавычки и другие символы уникода, отсутствующие в стандартной раскладке . Писал и о том, как я приспособил клавишу Compose, чтобы набирать ударения в словах (добавив специальную Compose-последовательность для символа ударения). Тогда же я ещё сокрушался, что среди стандартных Compose-последовательностей не хватает символа многоточия…

То, как я добавил новую Compose-последовательность (пересобрав метод ввода Latin-Plus) — было решением неудобным и негибким. Недавно же я узнал, как можно гораздо проще и быстрее задавать произвольные Compose-последовательности. Для этого, оказывается, достаточно отредактировать файл ~/.XCompose. Об этом и пойдёт речь.

1. Надо включить клавишу Compose (об этом я уже писал);
2. Маленькая хитрость. Вначале надо настроить систему так, чтобы библиотеки Qt и особенно GTK использовали метод ввода X Input Method (xim). Для этого в Debian можно установить im-switch, запустить im-switch -c и выбрать default-xim из списка. В других системах, видимо, надо присвоить переменным окружения GTK_IM_MODULE и QT_IM_MODULE значение xim (например, поместить GTK_IM_MODULE=xim в /etc/environment). Если этот шаг пропустить, все последующие настройки на GTK приложения распространяться не будут (они будут использовать свой метод ввода). С Qt приложениями, если честно, я не экспериментировал, но видимо и они могут иметь отдельную настройку;
3. После этого можно создать в домашнем каталоге файл ~/.XCompose. Первой его строчкой можно включить все стандартные комбинации клавиш:
include "/usr/share/X11/locale/en_US.UTF-8/Compose"

а затем можно и задать любые дополнительные последовательности (по образцу как в /usr/share/X11/locale/en_US.UTF-8/Compose). Например,
<Multi_key> <period> <space> : "…" U2026 # HORIZONTAL ELLIPSIS, многоточие
<Multi_key> <apostrophe> <apostrophe> : "́" U0301 # ударение

Всё, в запускаемых теперь приложениях должны работать новые комбинации. В частности, при нажатии Compose + точка + пробел будет набираться знак многоточия (который отличается от трёх точек), а если после буквы нажать Compose + два раза апостроф — над буквой появится знак ударения.

Таким образом можно вводить любые сиволы из уникодной таблицы (найти нужный символ поможет gnome-character-map). Достаточно вставить этот символ в кавычки после описания последовательности. Можно таким образом создавать целые клавиатурные макросы. В частности, я попробовал повесить <a href="" ></a> на сочетание Compose+a+h. Работает! Желающие могут взглянуть на мой файл ~/.XCompose (кодировка UTF-8). Я добавил туда ещё немного математики и греческие буквы.

Теперь можно прямо в e-mail писать: «∀ε>0 ∃δ>0 ∀x,|x-x₀|<δ : …» :)

Информацию я почерпнул из этих источников:
International text support on Linux
Compose key magic

Дополнение: в комментариях Shoorick дал ссылку на свой .XCompose, в котором есть дореволюционная буква «ѣ» и другая экзотичная кириллица, довольно удобные кавычки для русской раскладки, а также буквы для татарского, башкирского и казахского языков и набор разных стрелок (← → ↗ ↘ ⇐ ⇒ …): http://shoorick.ru/lj/txt/dotXCompose_as (стрелки, дореволюционные буквы и кавычки я заимствовал в свои настройки).

20071014

Как набирать с клавиатуры ударения в словах

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

Однако как ставить ударения в русских словах — я до сегодняшнего дня не знал, пока не прочитал замечательную статью «Как ставить ударение» в блоге Словомания. Идея состоит в том, что в таблице символов уникода уже имеются специальные «дополняющие диакритические знаки», которые изменяют идущие перед ними или после них символы. В частности, символ U+0301 ставит нужный штрих над предыдущей буквой.

U+0301 COMPOSING ACUTE ACCENT


С помощью этого символа можно легко ставить ударение над любой буквой, даже над «ы́» (и над согласными!:)). К сожалению не во всех шрифтах и программах этот символ выглядит правильно. В частности, в некрасивом поведении замечен шрифт Verdana. Зато программы, которые не умеют его обрабатывать — обычно просто его игнорируют. Это удобно.

В HTML набирать ударения просто. Достаточно набрать &#x301; после буквы, на которой должен стоять знак ударения. Пользователи Windows могут набирать ударение, нажимая клавишу Alt и набирая код символа на цифровом блоке клавиатуры…

А вот набирать ударение с помощью Compose-последовательностей оказалось непросто.

Дополнение 07.02.2008:
Позднее я нашёл гораздо более простой способ настраивать произвольные Compose-последовательности, рекомендую использовать именно его, а не то, что описано ниже.


В списке стандартных последовательностей дополняющего знака ударения нет.

Выход я нашёл такой:
  1. взял исходники дополнительных методов ввода для GTK+ Latin Plus,
  2. в таблице Compose-последовательностей (файл src/imlatinplus.c) повесил дополняющее ударение на место знака апострофа, который я могу набрать с клавиатуры напрямую, без Compose:
    RCS file: /cvsroot/gtk-im-extra/gtk-im-extra/src/imlatinplus.c,v
    retrieving revision 1.9
    diff -r1.9 imlatinplus.c
    325c325
    < GDK_Multi_key, GDK_apostrophe, GDK_space, 0, 0, 0x0027, /* APOSTROPHE */
    ---
    > GDK_Multi_key, GDK_apostrophe, GDK_space, 0, 0, 0x0301, /* COMBINING ACUTE ACCENT */

  3. собрал и установил Latin Plus с дополняющим ударением.
После этого в приложениях, использующих GTK+, можно выбирать метод ввода Latin Plus и набирать ударение, нажимая последовательно Compose, апостроф и пробел после символа, над которым нужно поставить знак ударения.

выбор метода ввода Latin Plus в GTK+


К сожалению, у такого подхода довольно жёсткое ограничение: работает только с приложениями, написанными на GTK+.

Набрано в gedit: «Приве'т, интерне'т!»


Да и со шрифтами ситуация далеко не радужная. Из установленных у меня шрифтов правильно ударение отображается в Arial, Arial Black, Arphica PL Kaiti, Bitstream Charter, Bitstream Vera Sans, Bitstream Vera Serif, Century Schoolbook L, Comic Sans MS, Courier 10 Pitch, DejaVu Sans, DejaVu Serif, Free Avant Garde, Free Bookman L, Free Courier, Free Helvetian, Free Helvetian Condensed, Free Paladin Roman, Free Sans Medium, Free Schoolbook Roman, Free Serif, Free Times Roman, Georgia, Impact, Nimbus Roman No9 L, Nimbus Sans L, Sans, Serif, Teams, Times New Roman (слишком высоко), Trebuchet MS, URW Bookman L (слишком слева), URW Gothic L, URW Palladio.

Неправильно: Andale Mono, Bitstream Vera Sans Mono, Courier New, DejaVu Sans Mono, Free Chancery Italic, Free Mono, Kochi Gothic, Kochi Mincho, Monospace, Nimbus Mono L, Sazanami Mincho, Terminus, Verdana.

Всё это относится, естественно, только к набору ударений средствами уникода. В LaTeX же ударения можно набирать как всегда:
Прив\'ет, мир!


Результат обработки строки «Прив\'ет, мир!» в LaTeX


Резюме. Средствами уникода можно набирать ударения в словах, для этого после буквы, на которую падаёт ударение нужно поставить символ U+0301. В HTML он набирается так: &#x301;. Для прямого набора этого символа с клавиатуры требуются ухищрения. Способ работает не со всеми программами и не со всеми шрифтами. Пользователи LaTeX могут набирать ударение, не прибегая к уникоду, поставив \' перед нужной буквой.

P.S. В списке стандартных Compose-последовательностей отсутствую также такие нужные для набора русского текста знаки как многоточие («…», U+2026) и знак номера («№», U+2116). Похоже, имеет смысл или делать для себя отдельный метод ввода для русского (модифицировав Latin Plus, например), или просить разработчиков Xorg и GTK+ добавлять указанные символы в их обычные таблицы. Есть какие-нибудь другие идеи?

Дополнение 07.02.2008:
Я нашёл простой способ настроить клавишу Compose с помощью файла ~/.XCompose.

20070907

Учебник: LaTeX, GNU/Linux и русский стиль

На днях попалась ссылка на цикл статей Е. М. Балдина «LaTeX, GNU/Linux и русский стиль». Статьи были написаны им для журнала Linux Format. По соглашению с редакцией, они теперь доступны и онлайн в PDF формате. Фактически, это книга-учебник по LaTeX (автор особо подчёркивает, что это ещё не книга, но по качеству текст близок к ней).

Думаю, этот материал будет полезен и тем, кто только начинает разбираться с LaTeX, и тем, кто уже давно им пользуется. Я, например, нашёл немало интересного в статье, посвящённой написанию компьютерной документации в LaTeX.

А для тех, у кого времени читать длинные тексты нет, а нужно просто писать — я даю ссылку на моё любимое наглядное пособие К. В. Воронцова «LaTeX2ε в примерах». Очень доходчиво.

20070706

Русский PDF в LaTeX

Уже достаточно давно практически все тексты, включая презентации, создаваемые в LaTeX я собираю в формат PDF. Он много меньше размером, чем Postscript, позволяет осуществлять поиск по тексту, позволяет включать изображения в формате PNG или JPG, а также делать гиперссылки, встроенное оглавление и многое другое. И самое главное, программы для просмотра PDF распространены гораздо более, чем программы для просмотра PS.

Однако для создания PDF с русскими буквами средствами LaTeX требуются некоторые ухищрения.

Во-первых, в этом случае надо использовать пакет cmap, иначе поиск по русским символам в полученном PDF будет невозможен.


Во-вторых, пакет для работы с графикой graphicx следует подключать с включенной опцией pdftex.

В-третьих, совсем невредно указать pdfTeX-у, что полученный PDF можно и ужать, для этого я устанавливаю переменную \pdfcompresslevel=9.

В-четвертых, я добавляю условный код, который делает всё вышеуказанное только если действительно используется pdfTeX, и использует другие пакеты и настройки, в случае если создаётся DVI/PS.

Ну и наконец, уж раз создаётся документ на русском языке, надо указать кодировку документа, правила расстановки переносов и кодировку шрифтов.
% до \documentclass
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % pdfLaTeX не используется
\else
\pdfoutput=1 % используется PDFLaTeX
\pdftrue
\fi

% в преамбуле
\usepackage[cp1251]{inputenc} % CP1251 или другая кодировка, с UTF8 не дружит bibTeX
\usepackage[russian]{babel} % правила переноса
...
\ifpdf
\usepackage{cmap} % чтобы работал поиск по PDF
\usepackage[pdftex]{graphicx}
\pdfcompresslevel=9 % сжимать PDF
\else
\usepackage{graphicx}
\fi


После этого полученный файл можно обрабатывать и обычным latex, и pdflatex, который будет сразу создавать PDF. Для просмотра PDF я обычно пользуюсь evince или xpdf, поскольку эти программы позволяют обновлять файл не меняя открытую страницу, что удобно в процессе редактирования.

Все иллюстрации я готовлю сразу в двух форматах: PDF и EPS (epstopdf легко преобразует графику из EPS в PDF), а в командах \includegraphics{image} расширение не указываю, тогда LaTeX автоматически включает изображение в подходящем формате.

Недавно virens написал о создании презентаций в LaTeX с помощью пакета beamer, и указал на ошибки возникающие при обработке русских букв.

Хочу отметить, что у меня подобные ошибки не возникают. При этом файлы beamer я пишу несколько иначе и обрабатываю их непосредственно pdflatex:

\documentclass[ignorenonframetext,hyperref={pdftex,unicode}]{beamer}
...
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
...
\usepackage{cmap}


Дополнение 1. Минимальный шаблон для PDFLaTeX

Вообще-то минимальный шаблон документа для pdflatex будет такой:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{cmap}

\begin{document}
Текст по-русски в кодировке UTF-8.
\end{document}
Это к тому, что разные \ifpdf выше — совсем не обязательны. Можно проще.

Дополнение 2. Шрифты CM-Super

Есть ещё такая тонкость: при использовании гарнитуры Computer Modern PDF получается гораздо лучше, если установлены шрифты CM-Super (пакет cm-super в Debian/Ubuntu).

Например, без CM-Super:

без CM-Super

С Type-1 шрифтами CM-Super:

с CM-Super

20061207

Марк Шаттлворт по-русски

Марк Шаттлворт* дал интервью на русском языке! Он рассказал о своих впечатлениях от полёта в космос: «Этот полет оказался очень значимым для меня. Во-первых, я мечтал о нем. Космос мне всегда казался платформой для вдохновения, образования и технологии. Во-вторых, я серьезно готовился к полету. На все ушло около года, при этом семь месяцев я прожил в Звездном городке под Москвой. Меня там тренировали, и мне самому действительно хотелось стать настоящим членом экипажа, а не пассажиром. Весь прожитый год – это и опыт физической работы, и определенные умственные упражнения, а в целом это был очень целостный опыт.»

Ещё Марк много говорит о том, почему и как развивается проект Ubuntu, дружественного и удобного варианта GNU/Linux.

*) Марк Шаттлворт - второй космический турист, основатель компании Thawte, и, с недавнего времени, проекта Ubuntu.