Типографская раскладка для 60-процентной клавиатуры. Эксперимент, часть 2
Всем привет! Продолжим разговор о клавиатуре. Обычную часть раскладки я описывал в предыдущей статье. А сейчас расскажу о возможностях, которые превращают раскладку в типографскую: пробелы, тире, дефисы, кавычки, апострофы, диакритические знаки.
Разумеется, прежде чем делать свою раскладку, я изучил уже имеющиеся варианты подобных раскладок. А также прошёлся по национальным раскладкам европейских языков. И не только по раскладкам, но и по самим языкам, чтобы знать, какие у них есть диакритические знаки и нестандартные буквы. Какие применяются кавычки, тире и апострофы. В общем, потратил на исследования уйму времени.
Пришлось также основательно прошерстить таблицу символов Unicode и прочитать текстовую часть стандарта.
Дело осложнялось тем, что клавиатура мне нужна была не только для набора текстов, но и для программирования, и для работы в программах, требующих использования горячих клавиш.
Поэтому требования получились противоречивые. Одна и та же кнопка должна уметь:
- выдавать разные символы, в зависимости от текущей языковой раскладки,
- выдавать один и тот же символ (чаще всего, не соответствующий клавише) независимо от раскладки,
- выдавать правильные сочетания (соответствующие клавише) с Alt, Ctrl, Shift, Win.
Не говоря уже о том, что в обычных текстах и в текстах программ знаки препинания встречаются с разной частотой. И невозможно расположить их оптимально сразу для всех вариантов использования.
Так что пришлось много пробовать и неоднократно переделывать. Некоторые символы умудрились побывать на всех слоях, пока нашли своё место.
Итак, поехали...
Пробелы
Большинству людей достаточно одного пробела — того, который находится на самой большой клавише. Некоторые слышали о пробеле неразрывном. И мало кто догадывается, что пробелов, вообще-то, много.
Чтобы проще было в них разобраться, я сделал табличку (красным цветом — неразрывные варианты).
Примечание. Шпация — типографский пробельный материал. Его максимальная ширина равна высоте кегля. Это т. н. кегельная или круглая шпация. Относительно неё измеряют ширину шпаций меньшего размера. Круглая также называется «Em space», полукруглая «En space». Хотя ширина букв «M» и «N» обычно немного меньше.
Название в Unicode [ширина в шпациях] |
Код |
Комбинация клавиш (используются левые Alt/Ctrl/Shift/Win) |
Парные пробелы (обычный и неразрывный такой же ширины) | ||
Пробел / Space [1/5-1/2 (типично 1/4-1/3)] |
U+0020 |
Space |
Неразрывный пробел / No-Break Space |
U+00A0 |
Alt+Space |
Тонкий пробел / Thin space [1/5 (реже 1/6)] |
U+2009 |
Shift+Space |
Узкий неразрывный пробел / Narrow No-Break Space |
U+202F |
Alt+Shift+Space |
Пробел нулевой ширины / Zero Width Space |
U+200B |
Ctrl+Space |
Соединитель слов / Word Joiner |
U+2060 |
Alt+Ctrl+Space |
Непарный пробел | ||
Самый тонкий пробел / Hair Space [1/10-1/16] |
U+200A |
Shift+Ctrl+Space |
Специальные виды пробелов | ||
Пробел, равный по ширине цифрам / Figure Space |
U+2007 |
Alt+Win+Space |
Пунктуационный пробел / Punctuation Space |
U+2008 |
Ctrl+Win+Space |
Средний математический пробел / Medium Mathematical Space |
U+205F |
Shift+Win+Space |
Иконка, символизирующая пробел / Open Box /␣ |
U+2423 |
Alt+Ctrl+Win+Space |
Выглядит таблица страшновато, но основные комбинации запомнить несложно: Alt — неразрывный, Shift — тонкий, Сtrl — нулевой ширины. Shift+Ctrl — промежуточный между тонким и нулевым. Сперва нажимаются модификаторы, затем — пробел.
Возможно, такой вариант будет понятней:
Модификаторы |
Ничего |
Shift (тонкий) |
Ctrl (нулевой) |
Ничего |
Space |
Thin space |
Zero Width Space |
Alt (неразрывный) |
No-Break Space |
Narrow No-break Space |
Word Joiner |
Если хотите узнать, какой пробел когда применять — вот несколько ссылок для подробного изучения:
Вот краткая версия:
- неразрывный — после предлогов и союзов; после частицы «не»; перед частицами «бы», «ли», «же»; между числами и единицами измерений (16 кг); после географических сокращений (г. Киев, р. Днепр)
- тонкий — после тире
- узкий неразрывный — в инициалах (C. П. Королёв); внутри сокращений (т. д.); перед тире; разделитель разрядов (12 564 456 байт)
- нулевой ширины — показывает места, в которых можно разрывать строку, не добавляя знак переноса (например, вот здесь он стоит после слешей: Alt/Ctrl/Shift/Win); для предотвращения автоматической замены комбинаций символов ( :) не будет преобразован в 🙂, если вставить этот пробел между символами ); для предотвращения автосоздания ссылок и ников (http://google.com и google.com)
- соединитель слов — нулевой ширины, запрещает разрыв строки в этом месте
- самый тонкий — тонкая подгонка для лучшего отображения текста
- цифровой пробел — при наборе таблиц из цифр (по ширине равен цифре)
- пунктуационный — в таблицах для разделения разрядов (по ширине как точка)
- математический — в формулах: ( α + β )
Кроме вышеуказанных в юникоде есть пробелы, пришедшие прямо из типографского дела. Их я тоже добавил:
CapsLock+1 — Em Space (равен ширине шпации, «круглая шпация»)
CapsLock+2 — En Space (½ шпации, «полукруглая шпация»)
CapsLock+3 — Three-Per-Em Space (⅓ шпации, «третная»)
CapsLock+4 — Four-Per-Em Space (¼ шпации, «четвертная»)
CapsLock+6 — Six-Per-Em Space (⅙ шпации, «шестерная»)
Дефис, минус, тире
С дефисом та же проблема, что и с пробелом: на клавиатуре есть только одна кнопка с подходящим символом (горизонтальной чёрточкой в середине строки). Поэтому её используют в качестве дефиса, минуса и тире (в юникоде он прямо так и называется: «дефис-минус»).
К этому все уже давно привыкли, да и вариантов не было — в ASCII нет отдельного символа для тире. Зато в Unicode он есть! И даже не один.
Название в Unicode |
Код |
Комбинация клавиш |
Дефис-минус / Hyphen-Minus |
U+002D |
— или CapsLock+p или p в режиме NumLock On |
Длинное тире / Em Dash |
U+2014 |
Space+g |
Среднее тире / En Dash |
U+2013 |
Space+y |
Two-Em Dash / Двойное тире |
U+2E3A |
Space+Alt+y |
Three-Em Dash / Тройное тире |
U+2E3B |
Space+Ctrl+y |
Неразрывный дефис / Non-Breaking Hyphen |
U+2011 |
Space+t |
Нижнее подчёркивание / Low line |
U+005F |
_ (Shift |
Цифровое тире / Figure dash |
U+2012 |
Space+Alt+r |
Мягкий перенос / Soft Hyphen |
U+00AD |
Space+Alt+t |
Horizontal Bar / Горизонтальная линия |
U+2015 |
Space+Shift+y |
Дефис / Hyphen |
U+2010 |
никто (?) его не использует |
Дефис маркер списка / Hyphen Bullet |
U+2043 |
Space+Ctrl+b |
Минус / Minus Sign |
U+2212 |
RWin+c |
Если хотите разобраться, зачем оно всё надо — вот несколько ссылок для чтения:
- Dashes and hyphens
- Чёрточки: только ли тире, минус и дефис?
- User:Jacobbrett/English Punctuation Guide
- User:Yurim/Punctuation and Special Characters
А вот то же самое вкратце:
- длинное тире — тире в украинском/русском языках
- среднее тире — в английском (и в укр/рус для диапазонов 1939 —1945)
- двойное тире — заменяет отсутствующую часть слова или всё слово (Mr. J⸺n)
- тройное тире — в списках книг заменяет полностью имя автора (т. е. означает «тот же автор»)
- неразрывный дефис — чтобы не разрывались сочетания «как‑то», «во‑первых» и т. п.
- горизонтальная линия — перед началом прямой речи в английском языке
- нижнее подчёркивание — это обычное подчёркивание (зачем там слово «нижнее»?)
- цифровое тире — употребляется с цифрами (например, в номерах телефонов: 123‒45‒67)
- мягкий перенос — вставляют в длинные слова в тех местах, где можно делать перенос; такой знак переноса будет отображаться только если слово находится в конце строки и не вмещается в неё. Это похоже на пробел нулевой ширины, только с пробелом при разрыве слова не отображается знак переноса. К сожалению, мягкий перенос не все программы правильно понимают. Иногда он обрабатывается как обычный дефис, и тогда слово выглядит вот так: «пе‑ре‑нос»
- дефис маркер списка
Несколько слов о минусе. Он специально сделан так, чтобы соответствовать по стилю остальным знакам арифметических операций. Смотрите, как это выглядит:
Здесь идут по порядку: дефис-минус, среднее тире, длинное тире, цифровое тире, а после знака равно — минус. Заметьте, что у знаков ’равно’, ’минус’, ’плюс’ и ’деление’ одинаковая ширина.
Теперь о длинном тире. По правилам нашей типографики он отбивается от текста тонкими шпациями. Поэтому у меня при нажатии тире вводятся сразу три символа: узкий неразрывный пробел, длинное тире, тонкий пробел. Если вы хотите, чтобы вводился один только пробел — это можно настроить (переменная EmDashWithSpace в скрипте или комбинация CapsLock+Alt+y для оперативного переключения).
Кавычки
Вариантов кавычек очень много. Нет смысла перечислять их все.
С практической точки зрения достаточно иметь английский, немецкий и французский варианты.
В украинском, испанском, португальском и итальянском языках используется комбинация французских и английских кавычек. В русском — французских и немецких.
Впрочем, во многих языках допускается использование альтернативных комбинаций кавычек.
Название в Unicode |
Код |
Вид |
Комбинация клавиш |
Открывающая левая кавычка «ёлочка» / Left Pointing Double Angle Quotation Mark |
U+00AB |
|
Space+Shift+a |
Закрывающая правая кавычка «ёлочка» / Right Pointing Double Angle Quotation Mark |
U+00BB |
|
Space+Shift+s |
Одинарная открывающая (левая) французская угловая кавычка / Single Left-Pointing Angle Quotation Mark |
U+2039 |
|
Space+Shift+q |
Одинарная закрывающая (правая) французская угловая кавычка / Single Right-Pointing Angle Quotation Mark |
U+203A |
|
Space+Shift+w |
Нижняя одинарная открывающая кавычка / Single Low-9 Quotation Mark |
U+201A |
|
Space+Shift+e |
Открывающая одинарная кавычка / Left Single Quotation Mark |
U+2018 |
|
Space+Shift+r |
Закрывающая одинарная кавычка / Right Single Quotation Mark |
U+2019 |
’ |
Space+Shift+t |
Закрывающая двойная кавычка / Left Double Quotation Mark |
U+201C |
" |
Space+Shift+f |
Правая двойная кавычка / Right Double Quotation Mark |
U+201D |
" |
Space+Shift+g |
Нижняя двойная открывающая кавычка / Double Low-9 Quotation Mark |
U+201E |
" |
Space+Shift+d |
Апостроф (одинарная кавычка) / Apostrophe |
U+0027 |
‘ |
‘ |
Двойная кавычка (универсальная) / Quotation Mark |
U+0022 |
" |
" |
Нагляднее будет показать расположение прямо на клавиатуре. Вот все кавычки вместе:
А вот с раскладкой по языкам. Зелёным цветом отмечены наружные кавычки (первичные, primary), голубым — внутренние (вторичные, secondary).
Вместо настоящих кавычек часто используют знак апострофа и универсальную двойную кавычку. Просто потому, что они есть на клавиатуре. Почему бы и нет, если это сообщение в мессенджере или комментарий в коде. Но в статьях и книгах лучше использовать правильные кавычки.
Апостроф и прочие чёрточки
В юникоде есть несколько вариантов апострофа.
Самый употребляемый — «Apostrophe» (U+0027), который находится рядом с Enter. Его часто называют «одинарная кавычка». Или машинописный апостроф, ASCII апостроф, прямой апостроф. А также «programmer’s apostrophe», т.к. он используется в языках программирования.
Почему у него столько названий? Потому, что с его помощью изображали все варианты чёрточек, располагающихся в верхней части строки: апостроф, ударение, одинарные кавычки, знак штриха и пр. На пишущих машинках (и в
На современных компьютерных клавиатурах ситуация не особо улучшилась: добавился только машинописный обратный апостроф (он же знак побочного ударения, grave accent). Находится он на самой левой кнопке в верхнем ряду. И настолько бесполезен, что чаще всего применяется в качестве экранирующего символа.
В общем, упомянутые выше символы следует использовать только при программировании. А в обычных текстах применять более подходящие варианты.
Для основных языков таких вариантов два:
- апостроф как знак препинания (т.е. разделяет слово на части — don’t, she’s)
- апостроф как буква (является частью слова и не разделяет его на части — об’єм, в’їзд, п’ять)
В первом случае нужно использовать символ «Right Single Quotation Mark» (U+2019), во втором — «Modifier Letter Apostrophe» (U+02BC).
Да, символ 2019 — это не только правая кавычка в английском, но и апостроф во всех (?) рассматриваемых здесь языках.
Для многих будет неожиданностью, что апостроф может служить в качестве буквы. А т. к. U+02BC считается буквой, его можно употреблять в названиях доменов на украинском языке (в отличие от U+2019).
Символ U+02BC называется также «типографский прямой апостроф». Что наводит на мысль о существовании апострофа «непрямого». И такой действительно есть: типографский перевёрнутый апостроф (U+02BB). Он используется, например, в узбекском языке.
Машинописный апостроф заменял также символ «штрих». Этот символ применяется в математике для обозначения производных, для обозначения угловых минут и для обозначения единицы длины «фут». На английском этот символ называется «Prime» и имеет код 2032. Есть также «Double prime» (U+2033) — двойная производная, угловые секунды и дюймы. Тройной штрих используется гораздо реже, а четверной мне вообще никогда не попадался.
Ещё одна широко известная чёрточка — знак ударéния. Его я опишу в следующем разделе.
Название в Unicode |
Код |
Вид |
Комбинация клавиш |
Апостроф (одинарная кавычка) / Apostrophe |
U+0027 |
‘ |
‘ |
Двойная кавычка (универсальная) / Quotation Mark |
U+0022 |
" |
" (Shift+’) |
Апостроф / Grave Accent |
U+0060 |
` |
` |
Закрывающая одинарная кавычка / Right Single Quotation Mark |
U+2019 |
‘ |
Space+Shift+t |
Модификатор буквы апостроф / Modifier Letter Apostrophe |
U+02BC |
ʼ |
Space+` |
Модификатор буквы перевернутая запятая / Modifier Letter Turned Comma |
U+02BB |
ʻ |
Space+Shift+` |
Штрих / Prime |
U+2032 |
′ |
Space+Alt+x |
Двойной штрих / Double Prime |
U+2033 |
" |
Space+Alt+c |
Тройной штрих / Triple Prime |
U+2034 |
‴ |
Space+Alt+v |
Знак повтора / Ditto mark |
U+3003 |
〃 |
Space+Alt+d |
Знак повтора применяется в перечислениях, где много незначительно отличающихся строк. Т. е. по назначению он напоминает тройное тире. Например:
В русском языке знак повтора обычно обрамляется по сторонам горизонтальными линиями: «⸺〃⸺». У меня это поведение по умолчанию. Но в скрипте можно изменить настройку, чтобы выводился только знак повтора. Можно также переключать это поведение по нажатию CapsLock+Ctrl+y.
На практике люди часто «не заморачиваются», и ставят вместо Ditto mark всё, что хоть как-то на него похоже: два апострофа подряд (‘‘ — U+0027), универсальную двойную кавычку (" — U+0022), закрывающую двойную кавычку (" — U+201D). В некоторых языках вместо ditto mark используют ”»”
или ”„”
.
Диакритические знаки
В украинском и русском языках букв с диакритическими знаками немного: «й», «і», «ї», «ё». Что позволяет без проблем выделить им отдельные клавиши. Но если посмотреть список латинских букв с диакритикой, можно увидеть, что там полторы сотни строк для одной только буквы «A»! Это больше, чем кнопок на клавиатуре.
Неудивительно, что давно придуман обходной вариант: буквы и диакритические знаки вводятся отдельно и комбинируются программным способом. Для этого часто применяется «механизм мёртвых клавиш». Его смысл состоит в том, что перед вводом нужного символа нажимается так называемая «мёртвая клавиша», которая сама по себе не отображает на экране никакого знака, а только модифицирует последующий символ.
В UNIX-подобных системах для реализации такого поведения используется клавиша Compose. Работает это следующим образом: нажимаем Compose, затем клавишу, отвечающую, например, за акут (на экране при этом ничего не отображается), затем букву А — появляется Á. Или Compose, затем клавишу, на которую назначен диерезис, затем О — получаем Ö.
В Windows такого нет, поэтому приходится эмулировать. По умолчанию в качестве клавиши Compose я использую клавишу «Menu» (между правыми Win и Ctrl). Но это можно перенастроить (см. главу «Настройка под себя» в конце следующей статьи).
Есть и другой способ ввода — когда диакритические знаки вводятся после нужного символа. У меня это тоже поддерживается (см. ниже).
Диакритические знаки в юникоде имеются в трёх вариантах: комбинируемые с другими символами, обычные некомбинируемые (знаки пунктуации) и некомбинируемые, считающиеся буквами (modifier letter).
Мне нужны (и далее описываются) только комбинируемые с буквами знаки. Так что перед их названиями в таблице мысленно добавьте «Combining» — для краткости я это слово пропустил.
Указанная в таблице клавиша — это клавиша, которая нажимается после Compose и перед символом, к которому будет применён диакритический знак.
Пример |
Код |
Кла- виша |
Название Unicode / прочие названия |
Примеры языков / описание |
à, è, s̀, z̀ |
0300 |
` |
Grave Accent / Гравис (тяжёлое ударение) |
голландский, норвежский, шведский |
á, é, ć, ń |
0301 |
‘ |
Acute Accent / Акут (лёгкое ударение) |
чешский, португальский, словацкий |
â, ê, î, ô |
0302 |
6 |
Circumflex Accent / Циркумфлекс (облегчённое ударение) |
турецкий, румынский, валлийский |
ã, ẽ, ñ, õ |
0303 |
~ |
Tilde / Тильда |
эстонский, португальский, баскский |
ā, ē, ī, ō |
0304 |
- |
Macron / Макрон |
латвийский, литовский |
ă, ĕ, ĭ, ŏ |
0306 |
u |
Breve / Бреве (бревис, кратка) |
румынский, турецкий |
ḃ, ċ, ġ, ż |
0307 |
. |
Dot Above / Надстрочная точка |
литовский, польский, турецкий |
ä, ï, ö, ü |
0308 |
: |
Diaeresis / Надстрочное двоеточие (умляут, диэрезис) |
немецкий, финский, албанский |
å, e̊, g̊, q̊ |
030A |
o |
Ring Above / Надстрочный кружок |
чешский, норвежский, датский |
ő, ű, Ő, Ű |
030B |
" |
Double Acute Accent / Двойной акут (венгерский умляут) |
венгерский |
Ď, Ť, č, ž |
030С |
v |
Caron / Карон (птичка над буквой), гачек, háček |
сербский, хорватский, боснийский |
ď, ť, ľ, Ľ |
0315 |
V |
Comma Above Right / Запятая сверху справа, кличка, малый гачек |
чешский, словацкий |
ņ , ŗ , ş , ţ |
0326 |
, |
Comma Below / Подстрочная запятая |
латвийский, румынский |
ç , ȩ ,m̧ , ş |
0327 |
c |
Cedilla / Cедиль |
албанский, каталонский, крымскотатарский |
ą , ę , į , ų |
0328 |
; |
Ogonek / Огонэк |
польский, литовский |
ạ, ṛ, ṭ, Ḷ |
0323 |
Shift + . |
Combining Dot Below / Комбинируемая подстрочная точка |
сицилийский, астурийский |
Ơ, ơ, Ư |
031B |
h |
Combining Horn / Комбинируемый рожок (quốc ngữ) |
вьетнамский, джарайский |
Ả, ẻ, Ỏ, ỷ |
0309 |
H |
Combining Hook Above / Комбинируемый хвостик сверху (dấu hỏi) |
вьетнамский |
Ŋ, ŋ |
0321 |
j |
Combining Palatalized Hook Below / Комбинируемый подстрочный палатальный (нёбный) крючок |
саамские языки |
ΐ, ΰ |
0344 |
W |
Combining Greek Dialytika Tonos / Комбинируемая греческая dialytika (растворяющая) тона |
греческий |
Диакритические знаки, которые не всегда комбинируются правильно | ||||
đ, ħ, Ð, ƀ |
0335 |
= |
Short Stroke Overlay / Короткое горизонтальное перечёркивание |
хорватский, джарайский, саамские |
Ħ |
0336 |
Shift + = |
Long Stroke Overlay / Длинное горизонтальное перечёркивание |
мальтийский |
Ł, ł , ð |
0337 |
/ |
Short Solidus Overlay / Короткое диагональное перечёркивание |
польский, фарерский |
Ø, ø |
0338 |
Shift + / |
Long Solidus Overlay / Длинное диагональное перечёркивание |
норвежский, датский |
Прочее | ||||
o̅e̅a̅ |
0305 |
Alt |
Combining Overline / Комбинируемое надчёркивание |
черта над знаком на всю ширину символа |
o̲e̲a̲ |
0332 |
Ctrl |
Combining Low Line / Комбинируемая низкая линия |
черта под знаком на всю ширину символа |
o̿e̿a̿ |
033F |
Alt+= |
Combining Double Overline / Комбинируемое двойное надчёркивание | |
o̳e̳a̳ |
0333 |
Ctrl+= |
Combining Double Low Line / Комбинируемая двойная низкая линия | |
a̱, e̱, i̱, o̱ |
0331 |
Shift |
Combining Macron Below / Комбинируемое подчёркивание | |
\ |
Ввод редких букв |
описано в следующей главе | ||
🇺🇦, 🇵🇱 |
r |
Ввод «Regional Indicator Symbol Letter» |
см. «Варианты начертания» в следующей статье | |
🅢 𝔇 🄼 |
m |
Математические буквы и цифры / варианты начертания |
―〃― | |
❤ ⚪ 🟦 |
g Alt+g Shift+g Ctrl+g |
Геометрические фигуры (цветные сердечки, кружочки, квадраты) |
см. «Дингбаты, эмодзи» в следующей статье |
Примечание. Символ U+0315 используется вместо обычного гачека U+030C только с указанными
Расположение диакритических знаков на клавиатуре:
В нижней части таблицы есть несколько диакритических знаков, которые не всегда комбинируются с буквами правильно. С другими знаками тоже иногда бывают проблемы, но с этими просто беда.
Пример:
Не вдаваясь в подробности, это происходит потому, что в шрифтах не указаны привязки оверлейной диакритики к буквам. Разработчиков шрифтов можно понять: какое-нибудь косое перечёркивание применяется только с буквой О, и она уже есть в шрифте готовая. Зачем напрягаться и прописывать привязки?
Бывает, что и в других местах не напрягаются:
Причём, происходит это только при комбинировании. А при вставке готовых символов всё отображается как надо. Это значит, что выход есть: нужно подменять комбинацию символа и диакритического знака на имеющийся в юникоде готовый символ, отрисованный уже сразу с диакритикой.
Понятно, что готовые символы есть не для всех комбинаций и не во всех шрифтах. Но для большинства распространённых сочетаний такое работает.
Поэтому в скрипте я перехватываю диакритический знак и символ, а вместо них вставляю готовый символ с диакритическим знаком, который ищу в заранее составленном массиве. Если не нашлось — отправляю, как есть. Это поведение по умолчанию, которое при необходимости можно отключить.
Такая необходимость может возникнуть, если вам нужно вводить русские символы с диакритическими знаками (например, показывать знак ударения над буквами).
Дело в том, что клавиатура отсылает не символы, а скан‑коды. И готовый символ с диакритикой ищется по скан-коду. Независимо от того, какая в данный момент включена раскладка клавиатуры. То есть, при работающем режиме подстановки и включенной русской раскладке вместо ожидаемого «у́» вы получите «é». Правда, иногда оно сработает как надо, например, «а́» (т. к. в массиве нет замены для комбинации " ́ " и «f»). Но я бы на это не рассчитывал.
Кстати, видите знак " ́ " в предыдущем абзаце? Если вам нужен отдельный диакритический знак (не над буквой), его можно получить, просто скомбинировав с пробелом.
Следующий момент. Существуют символы с несколькими диакритическими знаками. Чтобы их можно было вводить, предусмотрен режим «Диакритические знаки после символов».
В этом режиме вводится символ, а после него добавляется столько диакритических знаков, сколько нужно. Например, вот у этой буквы 15 диакритических знаков (разумеется, ни в одном языке такого нет, просто для примера):
Также, в этом режиме можно вытворять странное. Помните примечание под таблицей, что кличка автоматически подставляется вместо гачека с
Это можно сделать, вставив между буквой и диакритическим знаком такую штуку, как «Combining grapheme joiner» (CGJ, U+034F, комбинация Compose → Shift+Backspace). В этом случае гачек не будет автоматически заменён на кличку. Смотрите:
Заодно здесь видно, почему с этими буквами используется именно кличка, а не гачек — оно действительно выглядит ужасно.
Существует ещё один символ, который предназначен для борьбы с самоуправством программ автоматической обработки текста — «Zero-Width Non-Joiner» (ZWNJ, U+200C, Compose →Ctrl+Backspace). В основном он используется в языках, не основанных на латинице — персидский, бенгальский, непальский. Но и в латинице его иногда применяют, если нежелательна склейка букв в лигатуру. Чтобы стало понятней, приведу искусственный пример на русском. Например, вводим слово «металлоемкий», а редактор преобразовывает это в «металлœмкий». Что неправильно, т.к. в один символ объединились буквы из двух частей составного слова. Теперь тут даже перенос не поставишь. Вот в этом случае и пригодится ZWNJ.
В главе про эмодзи (следующая статья) будет описан ещё один «родственник» этих невидимых символов — «Zero Width Joiner».
Возвращаясь к диакритическим знакам, нужно отметить, что последовательность их ввода имеет значение. Каждый последующий знак применяется к уже имеющемуся составному символу. Проще говоря — располагается дальше от буквы:
А вот и таблица со списком языков, ввод на которых возможен с помощью моей раскладки. В ней указаны языки на основе латиницы и список используемых в них нестандартных (отсутствующих в латинском) букв, букв с диакритическими знаками, диграфов и лигатур (о них будет следующая глава).
Язык |
Страны |
Дополнительные символы |
Азербайджанский |
Азербайджан |
Ç ç, Ə ə, Ğ ğ, I ı, İ i, Ö ö, Ş ş, Ü ü |
Албанский |
Албания |
Ç ç, Dh dh, Ë ë, Gj gj, Ll ll, Nj nj, Rr rr, Sh sh, Th th, Xh xh, Zh zh |
Английский |
Великобритания, Ирландия, Мальта |
в заимствованных словах |
Астурийский |
Испания |
Ḷḷ ḷḷ |
Баскский |
Испания |
dd, ll, ñ, rr, ts, tt, tx, tz |
Боснийский (латин) |
Босния и Герцеговина |
Đ đ, Ž ž, Lj lj, Nj nj, Ć ć, Č č, Dž dž, Š š |
Бретонский |
Франция |
â, ê, î, ô, û, ù, ü, ñ |
Валлийский |
Великобритания |
Ch ch, Dd dd, Ff ff, Ng ng, Ll ll, Ph ph, Rh rh, Th th гласные с акутом, грависом, циркумфлексом, диерезисом |
Венгерский |
Венгрия |
Á á, Cs cs, Dz dz, Dzs dzs, É é, Gy gy, Í í, Ly ly, Ny ny, Ó ó, Ö ö, Ő ő, Sz sz, Ty ty, Ú ú, Ü ü, Ű ű, Zs zs |
Вьетнамский |
Вьетнам, Камбоджа, Лаос, Таиланд |
Ă ă, — â, Đ đ, Ê ê, Ô ô, Ơ ơ, Ư ư |
Гагаузский |
Молдова, Украина |
Ä ä, Ç ç, Ê ê, I ı, İ i, Ö ö, Ş ş, Ţ ţ, Ü ü |
Галисийский |
Испания |
ch, gu, ll, ñ, nh, rr, ü |
Датский |
Дания, Фареры, Гренландия, Исландия |
Æ æ, Ø ø, Å å |
Джарайский |
Вьетнам, Камбоджа |
Ă ă, — â, Ƀ ƀ, Č č, Đ đ, Ĕ ĕ, Ê ê, Ê̆ ê̆, Ĭ ĭ, Dj dj, Ñ ñ, Ng ng, Ŏ ŏ, Ô ô, Ô̆ ô̆, Ơ ơ, Ơ̆ ơ̆, Ŭ ŭ, Ư ư, Ư̆ ư̆ |
Зулусский |
ЮАР |
лишних букв и знаков нет |
Индонезийский |
Индонезия |
лишних букв и знаков нет |
Исландский |
Исландия |
Á á, Ð ð, É é, Í í, Ó ó, Ú ú, Ý ý, Þ þ, Æ æ, Ö ö |
Итальянский |
Италия, Швейцария, Сан-Марино, Ватикан |
à, è, é, ì, í, î, ò, ó, ù, ú |
Ирландский |
Ирландия, Великобритания |
гласные могут быть с акутом |
Испанский (кастильский) |
Испания, Андорра |
Ñ ñ, Ch ch, Ll ll, Qu qu, Gu gu, rr, Á á, É é, Í í, Ó ó, Ú ú, Ý ý, Üü |
Казахский (латин) |
Казахстан |
Á á, Ǵ ǵ, I ı, Ń ń, Ó ó, Ú ú, Ý ý, Sh sh, Ch ch |
Карельский |
Финляндия, Россия |
Č č, Š š, Ž ž, Ä ä, Ö ö |
Каталанский |
Испания, Андорра |
à, ç, dj, é, è, gu, ig, í, ï, ll, ŀl, ny, ó, ò, qu, rr, ss, tg, tj, tx, ú, ü, ix |
Крымскотатарский |
Украина |
Ç ç, Ğ ğ, I I, İ I, Ñ ñ, Ö ö, Ş ş, Ü ü |
Латинский |
Ватикан |
лишних букв нет |
Латышский |
Латвия |
Ā ā, Č č, Ē ē, Ģ ģ, Ī ī, Ķ ķ, Ļ ļ, Ņ ņ, Š š, Ū ū, Ž ž |
Литовский |
Литва |
Ą ą, Č č, Ę ę Ė ė, Į į, Š š, Ų ų, Ū ū, Ž ž |
Люксембургский |
Люксембург |
é, ä, ë |
Мальтийский |
Мальта |
Ċ ċ, Ġ ġ, GĦ għ, Ħ ħ, IE ie, Ż ż |
Немецкий |
Австрия, Бельгия, Германия, Лихтенштейн, Люксембург, Швейцария |
Ä ä, Ö ö, ẞ ß, Ü ü |
Нидерландский |
Нидерланды, Бельгия |
IJ ij, диерезис и акут |
Норвежский |
Норвегия |
Æ æ, Ø ø, Å å |
Окситанский |
Франция, Испания |
Á á, À à, Ç ç, È è, É é, Í í, Ï ï, Ó ó, Ò ò, Ú ú, Ü ü, n⸱h, s⸱h |
Польский |
Польша |
Ą ą, Ć ć, Ę ę, Ł ł, Ń ń, Ó ó, Ś ś, Ź ź, Ż ż, Ch, Cz, Dz, Dź, Dż, Rz, Sz, Szcz, Ść, Śc, Źdź, Źdz, Żdż, Ƶ ƶ |
Португальский |
Португалия |
Á á, — â, Ã ã, À à, Ç ç, É é, Ê ê, Í í, Ó ó, Ô ô, Õ õ, Ú ú |
Романшский |
Швейцария 0,6% населения |
tg |
Румынский |
Румыния |
Ă ă, — â, Î î, Ș ș, Ț ț |
Саамские языки |
Норвегия, Швеция, Финляндия |
Á á, — â, Ä ä, Å å, Æ æ, Č č, Đ đ, Ǧ ǧ, Ǥ ǥ, Ï ï, Ǩ ǩ, Ŋ ŋ, Ö ö, Õ õ, Ø ø, Š š, Ŧ ŧ, Ü ü, Ž ž, Ʒ ʒ, Ǯ ǯ |
Сербский (латин) |
Сербия, Босния и Герцеговина |
Ć ć, Č č, Đ đ, Dž dž, Lj lj, Nj nj, Š š, Ž ž |
Силезский |
Польша, Чехия |
à ã, Ć ć, Ł ł, Ń ń, Ŏ ŏ, Ō ō, Ô ô, Õ õ, Ś ś, Ź ź, Ż ż |
Сицилийский |
Италия |
À à, — â, Ç, ç, Ḍ ḍ, È è, Ê ê, Ë ë, Ġ ġ, ḥ, Ì ì, Í í, Î î, Ï ï, Ṅ ṅ, Ò ò, Ô ô, ṛ, Š š, ṭ, Ù ù, Ú ú, Û û, Ż ż |
Словацкий |
Словакия |
Á á, Ä ä, Č č, Ď ď, Dz dz, Dž dž, É é, Ch ch, Í í, Ĺ ĺ, Ľ ľ, Ň ň, Ó ó, Ô ô, Ŕ ŕ, Š š, Ť ť, Ú ú, Ý ý, Ž ž |
Словенский |
Словения |
Č č, Dž dž, Lj lj, Nj nj, Š š, Ž ž |
Татарский (латин) |
Татарстан |
Ä ä, Ç ç, Ğ ğ, I ı, İ I, Ñ ñ, Ö ö, Ş ş, Ü ü |
Турецкий |
Турция, Кипр |
Ç ç, Ğ ğ, I I, İ I, Ö ö, Ş ş, Ü ü, — â, Î î, Û û |
Туркменский |
Туркмения |
Ç ç, Ä ä, Ž ž, Ň ň, Ö ö, Ş ş, Ü ü, Ý ý |
Узбекский (латин) |
Узбекистан |
Oʻ oʻ, Gʻ gʻ, Sh sh, Ch ch, Ng ng |
Фарерский |
Фареры |
Á á, Ð ð, Í í, Ó ó, Ú ú, Ý ý, Æ æ, Ø ø |
Финский |
Финляндия |
Å å, Ä ä, Ö ö, Š š, Ž ž |
Фризский |
Нидерланды |
— â, Ê ê, É é, Ô ô, Û û, Ú ú, IJ, CH, NG, SJ, ZJ |
Хорватский |
Хорватия, Босния и Герцеговина |
Č č, Ć ć, Dž dž, Đ đ, Lj lj, Nj nj, Š š, Ž ž |
Черногорский (латин) |
Черногория |
Č č, Ć ć, Dž dž, Ð đ, Lj lj, Nj nj, Š š, Ś ś, Ž ž, Ź ź |
Чешский |
Чехия |
Á á, Č č, Ď ď, Dz dz, Dž dž, É é, Ě ě, Ch ch, Í í, Ň ň, Ó ó, Ř ř, Š š, Ť ť, Ú ú, Ů ů, Ý ý, Ž ž |
Шотландский |
Великобритания |
сh, bh, fh, гласные с грависом |
Эсперанто |
международный |
Ĉ ĉ, ͏Ĝ ĝ, Ĥ ĥ, Ĵ ĵ, Ŝ ŝ, Ŭ ŭ |
Эстонский |
Эстония |
Š š, Ž ž, Õ õ, Ä ä, Ö ö, Ü ü |
Разумеется, я не знаю все эти полсотни языков, так что в таблице могут быть неточности. И ведь это ещё не все языки! Сюда можно смело вписывать африкаанс, суахили, тсвана, руанда, сесото и множество других языков, основанных на латинице. Я просто не стал лезть в эти африканские дебри.
Некоторые указанные в таблице языки имеют как латинский, так и кириллический варианты алфавита (помечены как «латин»).
Обратите внимание на буквы Đ/đ и Ð/ð. Первая используется в сербохорватском и саамских языках, вторая — в фарерском. Хотя заглавные буквы выглядят одинаково, у них разные коды. Вводятся они тоже по-разному: первая через Short Stroke Overlay (клавиша «=»), вторая — через Short Solidus Overlay (клавиша «/»).
Диграфы, лигатуры и редкие буквы
Вы, вероятно, привыкли, что в каждой клетке кроссворда пишется только одна буква. А что вы скажете, если увидите там «Dž»?
Надеюсь, вы скажете, что это диграф. Т. е. составной письменный знак из двух частей. В русском языке такой тоже есть — буква «Ы».
На самом деле, диграфы редко считаются отдельными буквами. Чаще это просто устойчивое сочетание букв для обозначения каких-то звуков.
Особенность диграфов — они не разрываются при переносе на другую строку; если имя начинается с диграфа, в инициалы попадают оба символа; если предложение начинается с диграфа, в верхнем регистре пишутся обе буквы. Впрочем, это не универсальные правила для всех языков и всех диграфов.
Зато некоторые диграфы употребляются настолько часто, что удостоились отдельных символов в таблице Unicode. В моём скрипте они тоже есть.
Дальнейшее развитие диграфов — лигатуры. Здесь исходные символы уже полностью слились в один знак. Самые известные примеры — амперсанд (&) и дубль-вэ (w), но они и так есть на любой клавиатуре. А вот Æ, Œ и ß есть на клавиатурах только тех языков, где эти буквы используются.
Но и там нет стилистических лигатур ſt, st, ffl.
Кроме лигатур и диграфов я добавил также возможность ввода редких букв — торн (Þþ), шва (Əə), эт (Ðð) и пр.
Вот в этой табличке перечислено, что у меня есть. Вообще, лигатур в юникоде гораздо больше, но не все из них реально используются. Поэтому я их не добавлял.
Знак |
Код |
Комбинации клавиш (после Compose) |
Æ |
U+00C6 |
A→e или \→A |
æ |
U+00E6 |
a→e или \→a |
Œ |
U+0152 |
O→e или \→E |
œ |
U+0153 |
o→e или \→e |
ff |
U+FB00 |
f→f |
fl |
U+FB02 |
f→l |
fi |
U+FB01 |
f→i |
ſt |
U+FB05 |
f→t |
ffi |
U+FB03 |
f→f→i |
ffl |
U+FB04 |
f→f→l |
st |
U+FB06 |
s→t |
ʦ |
U+02A6 |
t→s |
IJ |
U+0132 |
I→J |
ij |
U+0133 |
i→j |
LJ |
U+01C7 |
L→J |
Lj |
U+01C8 |
L→j |
lj |
U+01C9 |
l→j |
Ŀ |
U+013F |
L→. или \→L |
ŀ |
U+0140 |
l→. или \→l |
Ỻ |
U+1EFA |
L→l |
ỻ |
U+1EFB |
l→l |
NJ |
U+01CA |
N→J |
Nj |
U+01CB |
N→j |
nj |
U+01CC |
n→j |
DZ |
U+01F1 |
D→Z |
Dz |
U+01F2 |
D→z |
dz |
U+01F3 |
d→z |
DŽ |
U+01C4 |
D→v→Z или X→Z |
Dž |
U+01C5 |
D→v→z или X→z |
dž |
U+01C6 |
x→v→z или x→z |
Ø |
U+00D8 |
\→O или /→O |
ø |
U+00F8 |
\→o или /→o |
ẞ |
U+1E9E |
\→B |
ß |
U+00DF |
\→b |
Ð |
U+00D0 |
\→D или /→D |
ð |
U+00F0 |
\→d или /→d |
Þ |
U+00DE |
\→T |
þ |
U+00FE |
\→t |
Ə |
U+018F |
\→^ (\→Shift+6) |
͏ə |
U+0259 |
\→6 |
Ǽ |
U+01FC |
‘→A→e |
ǽ |
U+01FD |
‘→a→e |
Ǣ |
U+01E2 |
-→A→e |
ǣ |
U+01E3 |
-→a→e |
Ǿ |
U+01FE |
‘→/→O |
ǿ |
U+01FF |
‘→/→o |
Ʒ |
U+01B7 |
\→Z |
ʒ |
U+0292 |
\→z |
Ǯ |
U+01EE |
v→Ctrl+z (просто v→z даст ž) |
ǯ |
U+01EF |
v→Alt+z |
Для ввода диграфов и триграфов после Compose просто нажимаются нужные буквы. Но здесь есть одна особенность, о которой сто́ит упомянуть. Есть диграф ff, а есть триграфы ffi и ffl. После того как будет нажато две буквы «f», диграф не отобразится. Скрипт будет ждать следующую букву. Если это будет i или l — напечатается триграф. Что‑то другое — диграф и введённый после него символ. Такая же ситуация с Á/Ǽ и Ā/Ǣ.
Как видите, для ввода редких символов после Compose используется клавиша «\». В том числе дублируются некоторые символы с диакритикой.
Для диграфов DŽ/Dž/dž предусмотрен более короткий вариант ввода — с помощью «x».
А некоторые из этих букв можно ввести ещё одним способом. Слева на слое Tab специально оставлено пустое место для пользовательских символов. Чтобы вы могли туда добавить то, что чаще всего используете (например, какую‑нибудь «ö»).
В скрипте эти символы прописываются в разделе «Private Use Area» (конец файла «Tab_pressed_layer.ahk»).
Пока вы туда ничего не добавили, я заполнил это место вот так:
Примечание. В каталанском есть буквы с точками сбоку: «Ŀ» и «ŀ ». Этa точка — интерпункт (средняя точка, U+00B7 middle dot). Для неё нет диакритического знака. Но её можно ввести отдельно после букв (Space+Ctrl+d). Или использовать сразу готовые буквы с точками, как показано в таблице выше. В окситанском тоже имеются сочетания с интерпунктом (n⸱h, s⸱h), но для них готовых символов в юникоде нет.
И, раз уж речь зашла о точках. В некоторых тюркских алфавитах есть необычная буква I. У которой, в отличие от английской, точка есть в верхнем регистре, а в нижнем нет: «ı» и «İ». Вводится она через Compose+. (диакритический знак Dot Above).
Кириллица
Я видел несколько вариантов универсальных кириллических раскладок, которые подходят для всех языков, основанных на кириллице. К сожалению, у этих раскладок есть большой недостаток: кому‑то придётся переучиваться, т. к. в разных языках разные раскладки. И это особенно обидно, учитывая, что бо́льшая часть букв во всех языках повторяется.
Поэтому я решил пойти другим путём: пусть каждый использует свою привычную кириллическую раскладку. А недостающие буквы берёт с отдельного слоя, куда вынесены все буквы, отсутствующие хотя бы в одном языке.
У меня получился вот такой слой:
Чтобы набрать одну букву с этого слоя, надо предварительно нажать Space+CapsLock. Для длительного переключения на слой и обратно — Space+Shift+CapsLock.
К сожалению, у некоторых букв оказалось слишком много вариантов и пришлось переносить их на «второй уровень». Красные буквы на рисунке для верхнего регистра нажимаются с Ctrl, для нижнего — с Alt.
Конечно, можно было назначить их на свободные клавиши, но я старался располагать их с учётом лёгкости запоминания. Так, чтобы было похоже по звучанию на английскую букву этой клавиши, или хотя бы по внешнему виду на букву/цифру/знак. Именно поэтому на «)» находится Э, а рядом, на «(» — её зеркальное отражение, украинская Є. Впрочем, традиционное расположение Э (клавиша «’») оказалось ничем не занято, поэтому туда я её тоже добавил.
Полагаю, что для местной аудитории наиболее актуальны украинские, белорусские и русские буквы. Вот я их отметил:
А это список поддерживаемых языков:
Язык |
Страны |
Дополнительные символы |
Белорусский |
Беларусь |
Дж дж, Дз дз, Ё ё, І і, Ў ў, Ы ы, Э э |
Болгарский |
Болгария |
лишних букв нет |
Боснийский |
Босния и Герцеговина |
Ђ ђ, Ј ј, Љ љ, Њ њ, Ћ ћ, Џ џ |
Казахский (кирил) |
Казахстан |
Ә ә, Ғ ғ, Қ қ, Ң ң, Ө ө, Ұ ұ, Ү ү, Һ һ, І і |
Киргизский |
Киргизия |
Ң ң, Ө ө, Ү ү, |
Македонский |
Северная Македония |
Ѓ ѓ, ͏ Ѕ ѕ, Ј ј, Љ љ, Њ њ, Ќ ќ, Џ џ |
Молдавский |
Молдова |
Ӂ ӂ, Ы ы |
Монгольский |
Монголия |
Ө ө, Ү ү |
Осетинский |
Россия |
Ӕ ӕ, Гъ гъ, Дж дж, Дз дз, Ё ё, Къ къ, Пъ пъ, Тъ тъ, Хъ хъ, Цъ цъ, Чъ чъ, Ъ ъ Ы ы, Э э |
Русинский |
Украина, Словакия, Польша |
Ґ ґ, Є є, Ё ё, І і, Ї ї, Ы ы, Ю ю, Я я, Ь ь, Ъ ъ |
Русский |
Россия, Беларусь |
Ё ё, Ы ы, Ъ ъ, Э э |
Сербский (кирил) |
Сербия, Черногория |
Ђ ђ Ј ј Љ љ Њ њ Ћ ћ Џ џ |
Таджикский |
Таджикистан |
Ғ ғ, Ё ё, Ӣ ӣ, Қ қ, Ӯ ӯ, Ҳ ҳ, Ҷ ҷ |
Татарский (кирил) |
Татарстан |
Ә ә, Ё ё, Җ җ, Ң ң, Ө ө, Ү ү, Һ һ, Ъ ъ, Ы ы, Э э, Ю ю, Я я |
Узбекский (кирил) |
Узбекистан |
Ғ ғ, Ҳ ҳ, Қ қ, Ў ў, Ъ ъ |
Украинский |
Украина |
Ґ ґ, І і, Ї ї, Є є, |
Цыганский |
территория бывшего СССР |
Ґ ґ, Ё ё, Ғ ғ, Кх кх, Пх пх, Рр рр, Тх тх, Ы ы, Э э, Ю ю, Я я |
Цыганский |
Сербия |
Ђ ђ, Ј ј, Кх кх, Љ љ, Њ њ, Пх пх, Рр рр, Тх тх, Ћ ћ, Ћх ћх, Чх чх, Џ џ,Ъ ъ |
Черногорский (кирил) |
Черногория |
Ђ ђ, З́ з́, Ј ј, Љ љ, Њ њ, С́ с́, Ћ ћ, Џ џ |
В некоторых кириллических языках есть буква «шва» (Ә). Внешне она такая же, как и латинская, но имеет другой код и вводится на слое с кириллицей. Буква Ӕ в осетинском тоже не такая, как Æ в латинице.
Языки, у которых есть и латинский вариант алфавита, помечены как «кирил».
Греческий алфавит
В технических текстах иногда попадаются греческие буквы. И приходится открывать Character Map, чтобы найти эту букву и вставить. Чтобы не тратить попусту время, я добавил в раскладку несколько самых ходовых букв. А когда оказалось, что нужно ещё — просто взял и подключил целиком все греческие буквы отдельным слоем.
Расположены они на тех же самых местах, что и в греческой раскладке. Для ввода одной греческой буквы нужно предварительно нажать Space+Tab (Space+Ѕhift+Tab для длительного переключения на слой и обратно).
Если посмотреть в таблицу юникода, там есть много диакритических знаков для греческого. Но, насколько я понимаю, большинство из них — для древнегреческого. А в современном языке используются только три: « ̈ »
, « ́ »
и « ̈́ »
. Первые два вводятся как обычные диерезис и акут, а третий («диалитика») расположен на том же месте, что и в греческой раскладке — в верхнем регистре клавиши w. Нижний регистр там уже занят буквой «ς».
Интересный момент: в греческом языке акут с заглавными буквами отображается не сверху, а слева от буквы. Например, вот пара латинских и пара греческих букв с акутом: Á H́, Ά Ή.
У некоторых греческих букв есть альтернативный вариант написания (выделен синим цветом). В этом случае буква в нижнем регистре вводится с Alt, в верхнем — c Shift+Alt.
Чтобы место на слое зря не пропадало, я добавил сюда ещё и римские цифры (голубые кнопки). Причём основной регистр для римских цифр (без Shift) — верхний. Т. к. он чаще используется.
Добавил также все 13 знаков зодиака, имеющихся в юникоде.
И циферблаты. Alt — Ч:00 минут, Alt+Shift — Ч:30 минут. Т.е. 2:30 — это Alt+Shift+2 (🕝).
И на этом с языками я закончил. Давайте посмотрим, что получилось в итоге.
Вот здесь есть табличка, в которой перечислены 99,7% самых распространённых в интернете языков. На моей раскладке можно использовать 90% (все перечисленные на основе латиницы и кириллицы, плюс греческий). Остальные 9,7% — это иероглифические языки, персидский, тайский, хинди, иврит, арабский. В оставшихся 0,3% тоже есть поддерживаемые языки: норвежский, латвийский, боснийский, казахский, белорусский и пр.
На этом пока всё. Как говорят на ТВ: «не переключайте канал». Третья статья серии уже готова, будет опубликована совсем скоро.
26 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів