Tags: (@8dbk

yo

Окончательная победа над шрифтами?

Здравствуйте, мои маленькие любители Linux.

Сегодня мы продолжаем цикл увлекательнейших статей про fontconfig и шрифты. Как вы помните, в прошлый раз мы победили шрифты семейства DejaVu, понизив их приоритет ниже шрифтов Microsoft. Принесло ли это нам полное удовлетворение? Не совсем. Существует немалое количество сайтов, созданных любителями Open Source. И эти любители, не моргнув глазом, прописывают шрифты семейства DejaVu в своих CSS. Слава богу, таких людей все же не так много, и с убогостью их сайтов можно смириться.

Но и это еще не все. Александр Соловьёв, в комментариях к предыдущей записи обратил мое внимание на то, что на некоторых сайтах скачет размер букв, то есть кириллические буквы заметно ниже латинских при том же размере шрифта. Воспроизвелось это крайне просто:

Default font: serif<br>
<br>
Latin O:   O<br>
Latin o:    o<br>
Cirillic O:  О<br>
Cirillic o:   о<br>
<br>
Here they come interleaved:<br>
OОOОOОOОOОOО<br>
oоoоoоoоoоoо<br>

Что привело к очаровательнейшей картинке:
interleaved.png

Но сам по себе Times New Roman содержит одинаковые по высоте глифы! Отгадка нашлась быстро. В предыдущий раз мы всего-лишь подвинули ниже строчку со шрифтами семейства DejaVu. А стоящий на первом месте шрифт семейства Bitstream Vera мы (я уж точно) не трогали. В обычной жизни этого было бы достаточно, так как шрифт семейства Bitstream Vera не содержит кириллицы и по текущей локали fontconfig выдает нам первый шрифт, в котором есть кириллица, то есть шрифт от Microsoft. Но Gecko (а следовательно Firefox) позволяет отрисовывать страницу, содержащую символы из различных алфавитов и, видимо, для большей универсальности, он запрашивает у fontconfig шрифт отдельно для латиницы, кириллицы, греческого, арабского, китайского и прочих алфавитов. И получилось, что для латиницы он использовал семейство Bitsream Vera, а для кириллицы шрифты от Microsoft.

Так что правильным будет передвинуть Microsoft’ские шрифты на первое место.

Вот такая вот история вышла. Интересно, это конец?

Upd: В Debian и, скорее всего, в Ubunte, а может быть и в других дистрибутивах, достаточно положить файлик local.conf с правильно заданными приоритетами в /etc/fonts.

permalink Add comment

yo

Окончательная победа над шрифтами?

Здравствуйте, мои маленькие любители Linux.

Сегодня мы продолжаем цикл увлекательнейших статей про fontconfig и шрифты. Как вы помните, в прошлый раз мы победили шрифты семейства DejaVu, понизив их приоритет ниже шрифтов Microsoft. Принесло ли это нам полное удовлетворение? Не совсем. Существует немалое количество сайтов, созданных любителями Open Source. И эти любители, не моргнув глазом, прописывают шрифты семейства DejaVu в своих CSS. Слава богу, таких людей все же не так много, и с убогостью их сайтов можно смириться.

Но и это еще не все. Александр Соловьёв, в комментариях к предыдущей записи обратил мое внимание на то, что на некоторых сайтах скачет размер букв, то есть кириллические буквы заметно ниже латинских при том же размере шрифта. Воспроизвелось это крайне просто:

Default font: serif<br>
<br>
Latin O:   O<br>
Latin o:    o<br>
Cirillic O:  О<br>
Cirillic o:   о<br>
<br>
Here they come interleaved:<br>
OОOОOОOОOОOО<br>
oоoоoоoоoоoо<br>

Что привело к очаровательнейшей картинке:
interleaved.png

Но сам по себе Times New Roman содержит одинаковые по высоте глифы! Отгадка нашлась быстро. В предыдущий раз мы всего-лишь подвинули ниже строчку со шрифтами семейства DejaVu. А стоящий на первом месте шрифт семейства Bitstream Vera мы (я уж точно) не трогали. В обычной жизни этого было бы достаточно, так как шрифт семейства Bitstream Vera не содержит кириллицы и по текущей локали fontconfig выдает нам первый шрифт, в котором есть кириллица, то есть шрифт от Microsoft. Но Gecko (а следовательно Firefox) позволяет отрисовывать страницу, содержащую символы из различных алфавитов и, видимо, для большей универсальности, он запрашивает у fontconfig шрифт отдельно для латиницы, кириллицы, греческого, арабского, китайского и прочих алфавитов. И получилось, что для латиницы он использовал семейство Bitsream Vera, а для кириллицы шрифты от Microsoft.

Так что правильным будет передвинуть Microsoft’ские шрифты на первое место.

Вот такая вот история вышла. Интересно, это конец?

Upd: В Debian и, скорее всего, в Ubunte, а может быть и в других дистрибутивах, достаточно положить файлик local.conf с правильно заданными приоритетами в /etc/fonts.

permalink Add comment

yo

Задание приоритета шрифтов в fontconfig

Итак, как я и обещал, рассказ о том, как оставить в системе шрифты семейства DejaVu, но снизить их приоритет до минимума.

Все (ну точнее подавляющее большинство) программы в среде X window получают шрифты одним из 2х способов:

  • клиент сообщает серверу что и каким шрифтом отрисовать, а выбором шрифта, его загрузкой и выводом на экран занимается сервер
  • клиент сам отрисовывает шрифты и посылает серверу битмапы.

Надо отметить, что программы использующие первый способ, вымирают как класс (что бы ни говорили противники *DE и любители xterm). И вопрос топика применительно к этим программам меня интересует мало. Поэтому только общее направление: отключить шрифты вообще можно разрегистрировав их из defoma (это если Xserver их хватает из x-ttcidfont-conf), а задать “умолчальные” обычно можно через файл ресурсов (Xresources).

А вот всякие Qt/GTK приложения самостоятельно занимаются отрисовкой шрифтов. И берут они их через механизм fontconfig. Для того, чтобы узнать, какой шрифт будет использован, если приложение запросило serif, достаточно выполнить команду

$ fc-match serif

Настройками fontconfig можно рулить через его конфиг-файлы, расположенные в /etc/fonts. В частности там можно задать/переопределить, семейства шрифтов, к каким семействам относятся те или иные шрифты, как отрисовываются шрифты (автохинтинг, хинтинг и т.д.), причем можно даже указать, какие настройки отрисовки будут применены к каким шрифтам (то есть в зависимости от имени, семейства, размера можно включать/выключать хинтинг). Документация по формату есть в fonts-conf (5).

В частности для задания приоритета шрифтов по семействам надо отредактировать файл /etc/fonts/conf.d/60-latin.conf (если у вас не Debian, то сами ищите где для семейств serif, sans-serif и monospace задаются предпочтительные (тег <prefer>) шрифты) так, чтобы майкрософтские шрифты (Times New Roman, Verdana и Courier New) были выше шрифтов DejaVu в своих семействах. После редактирования изменения вступят в силу для всех вновь запускаемых программ. Проверить можно, напоминаю, командой fc-match. Вот и вся черная магия.

Upd: Но это еще не все, читайте комментарии или следующую запись.
Upd2: В Debian и, скорее всего, в Ubunte, а может быть и в других дистрибутивах, достаточно положить файлик local.conf в /etc/fonts.

permalink Add comment

yo

О вреде ttf-dejavu

Недавно был спор с одним ценителем по поводу шрифтов ttf-dejavu. Человек утверждал, что эти шрифты устраивают его сильно больше майкрософтских и что вообще это очень хорошие шрифты.

Я не буду повторять, что шрифт, в котором буква “б” рисуется как греческая “δ”, это не шрифт, а убожество, а приведу вот такой скриншот:

With ttf-dejavu

Для сравнения то же самое без ttf-dejavu:

Without ttf-dejavu

Так что рекомендация: первым делом после установки Debian GNU/Linux делайте

# aptitude install msttcorefonts

И затем обязательно

# aptitude purge ttf-dejavu

И будет вам счастье.

permalink Add comment