Как сделать так, чтобы «автоматическая» жирная версия шрифта была шире, чем обычная, с тем же размером pt?

10

У меня есть моноширинный шрифт ( PT Mono), который я предпочитаю использовать в программировании IDE. Шрифт имеет только Regularвсе остальные Boldи Italicполучаются путем наклонения и «полужирности» Regular. Проблема в том, что «выделенные» символы шире, чем обычные, поэтому строки исходного кода в окне IDE теперь состоят из немонокальных символов.

Как мне контролировать «выделение шрифта», чтобы он не стал шире обычного?

Проблема проиллюстрирована на скриншоте ниже ( PT Monoбез выделенного жирным шрифтом). Посмотрите, как слова «unsigned char» и «sizeof» выходят из правильных позиций.

автоматическое выделение изменяет ширину

Вот еще один пример, Droid Sans Mono(без выделенного жирным шрифтом). введите описание изображения здесь

А вот пример, когда шрифт выделил жирную версию ( Liberation Mono). Жирный и регулярный идеально выровнены. введите описание изображения здесь

Таким образом, проблема определенно заключается в несерьезном выделении жирным шрифтом в ситуациях, когда жирный шрифт не предоставляется. Виноват движок шрифтов.

UPD: есть файл, /etc/fonts/conf.avail/90-synthetic.confкоторый, если на него ссылаются из /etc/fonts/conf.d/механизма шрифтов, выполняет синтетическое подталкивание шрифтов, которые не имеют жирной версии. Если символическая ссылка на этот файл удалена из /etc/fonts/conf.d/, то ободрение исчезает. Это не то, что нужно, но, по крайней мере, это устраняет случай, когда моноширинные шрифты не являются моноширинными (см. Ниже PT Mono). Точная настройка ободрения все еще требуется (либо с помощью файла конфигурации, либо с помощью freetype2патча.

введите описание изображения здесь

mbaitoff
источник
Вы не можете это контролировать. Дизайн шрифта будет разрушен. Даже если вы точно уменьшите размер (чего вы не можете), чтобы он соответствовал обычному интервалу шрифта, жирный шрифт будет выглядеть меньше. Если вам нужен равномерно распределенный шрифт, просто не используйте жирный шрифт ... или попробуйте терминал
zetah
Это не правда. Шрифты, которые имеют как обычные, так и полужирные шрифты, представленные в отдельных файлах, имеют одинаковую ширину символа в обычном и жирном шрифте. Например, LetterGothic.
mbaitoff
Я стою исправлено. Я заметил то же самое при использовании SciTE (и, возможно, вы тоже используете редактор на основе Scintilla - возможно, Geany?), В то время как мой шрифт - Droid Sans Mono, но я воспринял это как должное, и у меня не было идеи, что взвешенный шрифт может иметь различный интервал даже для моноширинных шрифтов, тогда как жирный шрифт использует тот же интервал, что и обычный. Еще более похоже, что и пропорциональные шрифты имеют эту «особенность», которую вы заметили, но не все. Извините за мой смелый первый ответ, я должен был сначала проверить
Зет
@zetah: я просматривал разные файлы шрифтов и похоже, что изменение ширины действительно происходит только тогда, когда нет выделенной жирной версии шрифта. Я собираюсь обновить вопрос с большим количеством скриншотов.
mbaitoff
1
упоминается также здесь: bugs.launchpad.net/ubuntu/+source/ttf-droid/+bug/565393
zetah

Ответы:

8

mbaitoff , я выкладываю это как дополнение к вашему обновлению, а не как ответ

Если пользователь создает файл с именем ~/.fonts.conf:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="font">
        <test name="spacing" compare="eq">
            <const>mono</const>
        </test>
        <edit name="embolden" mode="assign">
            <bool>false</bool>
        </edit>
    </match>
</fontconfig>

затем приложения могут использовать жирный моноширинный шрифт, если он доступен, и отключить «синтетический жирный шрифт», если используемый шрифт не имеет жирного шрифта.

Это просто альтернатива, и немного другой подход с другим результатом

zetah
источник
Если символическая ссылка /etc/conf.d/50-user.confпереименована для выполнения после 90-synthetic.conf, вам не нужно полностью удалять embolden. 99-user.confработает отлично. В противном случае, 90-synthetic.confвключите его снова.
MusiKk