20071014

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

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

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

U+0301 COMPOSING ACUTE ACCENT


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

В HTML набирать ударения просто. Достаточно набрать ́ после буквы, на которой должен стоять знак ударения. Пользователи 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.