Недавно я собрался встроить какой-нибудь типограф в свой блог. Захотелось писать 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>
Включается клавиша 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, в котором соответствующая строчка запишется следующим
образом:
Подробности см. в [статье][] по этому поводу.
Этого [может не хватить][] для полноценной работы 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-сочетания.
Я надеюсь, у вас установлены Юникодные шрифты.
[
]: http://www.flickr.com/photos/nothingpersonal/533360720/
"Photo Sharing"
[домашней странице Xah Lee]: http://xahlee.org/emacs/emacs_n_unicode.html
[интерфейс]: http://www.emacswiki.org/cgi-bin/wiki/emacs-w3m
[«Типограф»]: http://www.artlebedev.ru/tools/typograf/
[Jevix]: http://jevix.ru/
[Devanagari]: http://www.erlang.com.ru/devanagari/
[Markdown]: http://dzhus.org/posts/2007-03-16-markdown-and-lightweight-markup.html
[abcTajpu]: https://addons.mozilla.org/en-US/firefox/addon/459
[Firefox]: http://www.mozilla.ru/products/firefox/
[домашней странице]: http://lingvo.org/abctajpu/
[диакритических знаков]: http://ru.wikipedia.org/wiki/Диакритический знак
[«Compose»]: http://en.wikipedia.org/wiki/Compose_key
[Полный список Compose-сокращений]: http://webcvs.freedesktop.org/xorg/xc/nls/Compose/en_US.UTF-8?view=co
[статье]: http://dzhus.org/posts/2007-12-31-msnek-linux.html
[может не хватить]: http://zulu.in.ua/index.php/2007/01/11/x-composite-key