Недавно я собрался встроить какой-нибудь типограф в свой блог. Захотелось писать fine text с классными тире, кавычками-«ёлочками» да правильными пробелами по случаю. Ещё прикалывает «висячая» пунктуация, о которой с такой любовью писал Арт. Лебедев в § 120 своего «Ководства», но это уже фетиш, на который не всегда есть время. Расставить все эти знаки в контексте веб-страниц можно по разному. Я, однако, выйду за рамки WWW, рассмотрев TeX, Emacs, XML, Firefox и X.org.
Юникод
Современный мир подарил нам стандарт Unicode, который позволяет использовать единобразную кодировку для всех языков мира. Среди символов Unicode, помимо букв и знаков из любых современных и исторических видов письменности, есть и разнообразная пунктуация и непечатаемые символы (есть, например, тетраграммы из «Книги Перемен»). И хотя современные программные средства по разному обрабатывают и отображают эти знаки (а иногда и вовсе не поддерживают Юникод), всё же окончательная поддержка Юникода везде неотвратима (хотя и существуют проблемы с принятием Юникода в ряде культур, например, Японии).
В частности, в секции «General Punctuation» в списке символов Unicode определяются и все мыслимые и немыслимые кавычки, различные пробелы, знаки табуляции, переноса и прочая, и прочая, и прочая.
Например, интересен символ «мягкого» переноса — «soft hyphen» aka «SHY» (то есть, «скромный»). Он предназначен для обозначения места, где можно разорвать слово при отображении и поставить знак переноса. Он весьма посредственно поддерживается браузерами. Для больших славных текстов его можно использовать (для быстрых записей в блог расставлять мягкие переносы — слишком).
А ещё в секции «Mathematical symbols» описано множество математических символов. ∀ε>0: ∃ω: ω×ε=1337.
Способы ввода «красивых символов»
Реальность же такова, что без дополнительных усилий с клавиатуры из всего типографического юникодного блаженства можно ввести лишь знаки дюйма " (в Юникоде в секции «ASCII punctuation» этот знак определяется как «neutral (vertical) quotation mark»), апостроф ’ и значок акцента ` aka «backtick». Это всё машинописное наследие.
TeX
Справедливости ради стоит отметить, что в TeX уже несколько десятков лет есть отличные отточенные шрифты, немыслимые возможности для создания красивых формул, ну и красивые кавычки, тире и всё такое. С его помощью очень удобно создавать прекрасные тексты для бумаги. Пишите диссертации, доклады и письма в TeX! Современный XeTeX позволяет использовать разнообразные символы Unicode в документах напрямую, были бы нужные глифы в шрифте; в обычном LaTeX, к примеру, нужно добавлять в преамбулу \usepackage[utf8x]{inputenc}
.
Windows
В Виндоус исторически можно зажимать Alt и вводить цифровой код символа. Только помнить цифровые коды всех интересующих символов — тупо, немнемонично и лишняя нагрузка на мöзг. В современых операционных системах также есть разнообразные «Таблицы символов», только их очень долго использовать.
XML
В XML (а следовательно и в XHTML) можно использовать мнемоничные XML-сущности типа λ
для греческой „λ“ или —
для длинного m-тире „—“. Они покрывают значительное количество интересных Unicode-символов. Только вот код с их использованием очень плохо читается.
Лучше сразу вводить Юникодные символы.
Emacs
Есть условия для этого в Emacs, где ввод, например, C-x 8 < даёт кавычку-ёлочку « (общая схема такова: C-x 8 [мнемоника], хотя можно и на что-то более удобное биндинг переопределить). В nxml-mode подсвечиваются неразрывные пробелы, условно показываются места «мягких» переносов:
Подробнее о вводе Unicode-символов в Emacs можно прочитать на домашней странице Xah Lee.
Инструменты для WWW
Но набирать текст в Emacs и копировать его в браузер не хотелось, а в w3m, для которого у Emacs есть интерфейс, я постоянно не сижу.
Нынче модны встраиваемые в CMS автоматические типографы. Я рассматривал «Типограф» Лебедева, Jevix, Devanagari, но что-то ни один не устроил. То настройки не те, то с Markdown не дружит. Да и вообще, отложенная и автоматизированная обработка меня не устраивала. Когда у меня в тексте записи приведён исходный код с обычными знаками "
— типографы бессовестно «облагораживают» их, превращая в «красивые» кавычки. Единственное, для чего мне хотелось бы их использовать — для расстановки неразрывных пробелов вокруг вспомогательных частей речи (предлогов, союзов, частиц) в тексте. Делать это руками — некошерно.
Кроме того, хотелось использовать правильные символы не только на страницах своего сайта, но и вообще over the Net.
Короче, стал искать что-то ручное, но удобное.
abcTajpu
И нашёл: расширение abcTajpu для Firefox. Предназначено для многоязыкового ввода в браузере. Изначально предоставляет что-то вроде встроенной таблицы символов в отдельном окне и в контекстных меню. Но самое удобное в нём — возможность использования мнемоничных сочетаний символов для ввода нестандартных знаков, сходно с Emacs, по общей схеме [мнемоника] [INS] ([INS]
— кнопка «Insert», можно поменять на другую), например:
- a:[INS] даёт ä
- l[INS] даёт λ
- –[INS] даёт — (m-тире)
Встроенные биндинги (их список есть на домашней странице проекта) уже достаточно удобны и аналогичны тем, что приняты в LaTeX для ввода тире и кавычек. И вообще такая схема ввода нестандартных символов очень удобна. По работе напоминает механизм аббревиатур в Emacs.
Есть также сокращения ALT-F2 для быстрого добавления различных диакритических знаков.
Более того, всё это легко дополняется своими сочетаниями (например, ББ для », чтобы не переключать раскладку при наборе русским).
Короче, abcTajpu для Firefox — славное подспорье. Плюс в том, что работает везде, где есть Firefox (впрочем, с Emacs ситуация такая же).
Compose Key
Самое лучшее средство обнаружилось под носом. Я не сразу наткнулся на него, однако это в итоге оказалось наилучшим решением. X.org позволяет вводить различные Юникодные символы, используя клавишу «Compose» (обычно она назначается на одну из кнопок «Windows») и, опять же, простые мнемоники: нажимается сначала Compose
, потом вводится соответствующее сокращение, например:
[CMP] > > даст »
[CMP] + - даст ±
[CMP] O C [CMP] O R даст © ®
[CMP] p ! [CMP] s o даст ¶ §
[CMP] - - - даст — (m-тире)
[CMP] [пробел] [пробел] даст неразрывный пробел
1 [CMP] : - 2 [CMP] ^ 2 = [CMP] 1 4 даст 1÷2²=¼
Полный список Compose-сокращений лежит в файлах используемой системной локали; у меня он находится в /usr/share/X11/locale/ru_RU.UTF-8/Compose
. Большой: около 5600 строк, по одной на каждое сочетание (для многих символов есть по нескольку сочетаний). В целом, все сочетания «разумные» и вводить удобно.
Список доступных сокращений можно пополнить, дописав свои желаемые сочетания в файл ~/.XCompose
:
include "/usr/share/X11/locale/en_US.UTF-8/Compose"
<Multi_key> <slash> <equal> : "≠" U2260 # NOT EQUAL TO
<Multi_key> <equal> <slash> : "≠" U2260 # NOT EQUAL TO
<Multi_key> <apostrophe> <apostrophe> : "́" U0301 # COMBINING ACUTE ACCENT
<Multi_key> <minus> <greater> : "→" U2192 # RIGHTWARDS ARROW
<Multi_key> <less> <minus> : "←" U2190 # LEFTWARDS ARROW
<Multi_key> <equal> <greater> : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW
Включается клавиша Compose следующим образом:: в /etc/X11/xorg.conf
нужно отыскать секцию "Input Device"
, отвечающую настройкам клавиатуры, и в значении опции XkbOptions
дописать compose:lwin
(вместо lwin
можно использовать и другие кнопки типа ralt
и т. д.). У меня вся строка приняла вид:
Option "XkbOptions" "grp:caps_toggle,grp_led:caps,compose:ralt"
В сервере X.org начиная с версии 1.5 конфигурирование устройств ввода осуществляется через .fdi
-файл системы HAL, в котором соответствующая строчка запишется следующим образом:
<merge key="input.x11_options.XkbOptions" type="strlist">grp:caps_toggle</merge>
<append key="input.x11_options.XkbOptions" type="strlist">grp_led:caps</append>
<append key="input.x11_options.XkbOptions" type="strlist">compose:ralt</append>
Подробности см. в статье по этому поводу.
Этого может не хватить для полноценной работы Compose
в Gtk-приложениях: Gtk+ по умолчанию использует свой метод ввода; чтобы использовался стандартный иксовый метод, нужно установить переменную окружения GTK_IM_MODULE
в значение xim
(X Input Method); в Gentoo можно сделать это в одном из файлов в /etc/env.d
:
$ sudo echo "GTK_IM_MODULE=xim" >> /etc/env.d/50gtk2
И в Gtk-шных прогах заработают все Compose
-сочетания.
Я надеюсь, у вас установлены Юникодные шрифты.