Как известно, существует 3 общепринятых названия для семейств шрифтов:
- Пропорциональные с засечками, serif. Широко используются в типографии, где не присутствуют ограничения, связанные с низкой разрешающей способностью (DPI) отображающих устройств; в “электронных” материалах ими оформляются различные более-менее объемные статьи, руководства, тексты книг и т.д.
- Пропорциональные без засечек, sans-serif. Используются в оформлении интерфейсов программ. Как считается, легче для восприятия на устройствах с низким разрешением (таких, как, например, обыкновенные мониторы).
- Моноширинные, monospace. В основном используются там, где важно соблюсти структуру текста, например, в текстовых схемах, ASCII-арте; также в листингах кода.
Корейские “Jamo” — основной слоговый элемент письменного корейского языка — очень красивы в начертании. Особенно это заметно, если используется шрифт “с засечками” и почти не заметно, если шрифт “без засечек”. Поэтому, встала задача: все корейские символы, отображаемые шрифтом sans-serif, заменять на шрифт из семейства sans, сохраняя, при этом, семейство по умолчанию для символов не-корейского алфавита.
По крайней мере в линуксе, sans, serif и monospace выступают в качестве “алиасов” для одного или нескольких шрифтов, представляющих семейство в целом, и для современных дистров им соответствуют шрифты из сеймейства DejaVu. Таким образом, можно в определенном месте (например, в терминале) выставить шрифт “Monospace”, а на деле будет отображаться DejaVu Monospace, так же для всей системы целиком. Это удобно, если вдруг захочется, чтобы моноширинный текст рендерился, например, Terminus’ом. Для корейских символов верно такое соответствие в Ubuntu 8.10:
- Serif: UnBatang
- Sans-serif: UnDotum
- Monospace: AFAIU, все корейские шрифты являются моноширинными, по умолчанию установлен UnDotum.
Мне очень нравится UnBatang, поэтому в интерфейсе (Sans) я хочу видеть именно его вместо некрасивого UnDotum. Соответствия шрифтов с “алиасами” Serif и Monospace остается назначить по вкусу, пока я остановился на UnGungseo и UnDotum соответственно. Примерно так (не забывайте кликать по картинкам):
А как отображается у вас? 안녕하세요!
Локальную конфигурацию рендеринга шрифтов (fontconfig & ko) рекомендуется осуществлять через ~/.fonts.conf, исчерпывающее описание которого приведено в man fonts-conf. Итак, нам нужно, когда приложение попросит шрифт определенного алиаса (sans-serif, serif, monospace) для отображения символов корейского языка, отдать называние желаемого шрифта вместо алиаса (или как-то так). Консультируемся с маном, в конфиге пишем:
~/.fonts.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- Set some nice default korean fonts --> <match target="pattern"> <test qual="any" name="family"><string>sans-serif</string></test> <test qual="any" name="lang"><string>ko</string></test> <edit name="family" mode="assign" binding="strong"> <string>UnBatang</string> </edit> </match> <match target="pattern"> <test qual="any" name="family"><string>serif</string></test> <test qual="any" name="lang"><string>ko</string></test> <edit name="family" mode="assign" binding="strong"> <string>UnGungseo</string> </edit> </match> <match target="pattern"> <test qual="any" name="family"><string>monospace</string></test> <test qual="any" name="lang"><string>ko</string></test> <edit name="family" mode="assign" binding="strong"> <string>UnDotum</string> </edit> </match> </fontconfig> |
Вот и все! Выглядит же это так:
Обратите внимание, в качестве шрифта для системного интерфейса установлен Sans (он и отображается), и он же выбран в программе “Таблица символов”, где отображается UnBatang, вместо UnDotum. Ура!
Поскольку jamo объединяют в себе от двух до четырех символов, выглядят они заметно мельче, чем буквы латинского или кириллического алфавитов. Если же jamo “растянуть” при помощи fontconfig, т.е. чтобы они при размере X всех прочих символов отображались бы размером на Y большим, X+Y, то они перестанут вмещаться в текстбоксы, расчитанные на более мелкий (X) размер шрифта. Т.е. вместо

получим

Если вы все же хотите попробовать, вот код, который нужно добавить в match’и:
<edit name="matrix" mode="assign"> <times> <name>matrix</name> <matrix><double>1.2</double><double>0</double> <double>0</double><double>1.2</double> </matrix> </times> </edit>
For those who are curious, так может выглядеть “кореезированная” убунта (скрин с ноута):


