Чому висота шрифту змінюється жирним шрифтом?


9

Це так дратує ...

Коли в будь-якому тексті рядка змінено обличчя так, щоб текст був виділений жирним шрифтом, висота рядка збільшується на (я припускаю) на один піксель. Найкраще це показано із зображенням:

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

Чому це? Як мені це запобігти?


За запитом, інформація на платформі:

  • Debian GNU / Linux sid (нестабільний) на amd64
  • Emacs використовує libgtk-3.so.0 (gtk 3.14.5), на XFCE 4.12

Я спробував такі шрифти в 8pt, 9pt, 10pt та 11pt:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Моно визволення

Проблема виникає лише з DejaVu Sans Mono та DejaVu Sans, і лише в 9pt та 10pt. (Зображення наведено вище DejaVu Sans Mono-9.)


2
Ви повинні переглянути атрибути обличчя defunexample перед тим, як ставити пробіл, а потім знову на кожне слово після введення пробілу між defun та прикладом . Це робиться, розміщуючи курсор у потрібній точці, а потім набираючи текст C-u C-x =. Напевно, ви побачите, що або на обличчя, яке впливає на розбещення, або на приклад, що впливає на обличчя, є різні атрибути, які відповідають за поведінку, яку ви бачите - наприклад, крім основного кольору переднього плану. Користувач може налаштувати атрибути обличчя.
законник

Чи можете ви додати до свого запитання операційну систему та менеджер вікон, а також деяку інформацію про те, який графічний інтерфейс використовує ваш Emacs (наприклад, Gtk2, Gtk3 тощо)?
місячник

@lawlist: спасибі людина. У пробілі застосовано шрифт-lock-function-name-face, який має невизначену висоту (тому я вважаю, що за замовчуванням?). Без пробілу жодне обличчя не застосовується (тож, знову ж таки, я вважаю, що за замовчуванням?) За замовчуванням у моїй темі встановлено значення :height 90(9pt).
Едам

@lawlist: ще кілька розслідувань .... у темі, якщо я видаляю / додаю / вилучую / додаю :weight boldз font-lock-function-name-face(та повторно виконую команду теми custom-theme-set-faces), я можу побачити висоту defunзміни рядка на 1px! Я думаю, що це, безумовно, сміливий атрибут, що викликає це.
Едам

Моя здогадка, що базується на ваших коментарях, полягатиме в тому, що вибране вами сімейство шрифтів має різну висоту для жирних атрибутів, тому його неможливо змінити, якщо ви не вручну зменшуєте його - проба та помилка, повільно зменшуючи розмір точки. Крім того, виберіть сімейство, яке не змінює висоту, коли застосовується жирний шрифт. Я особисто більше не використовую жирний або підкреслюючи жодну з моїх спеціальних тем з різних причин, пов’язаних із візуальними ефектами в буфері - коли я створюю підкреслення для поточної лінії, це робиться з накладанням. Для сміливих я просто використовую сильні кольори - наприклад, пурпурний, жовтий, ...
законник

Відповіді:


2

Висота шрифту змінюється в DejaVu в цьому розмірі точки, оскільки інформація про висоту шрифту між двома звичайними та жирними шрифтами відрізняється, коли вона повинна бути однаковою.

Використовуваний я шрифт DejaVu Sans Mono 10 не змінює висоту шрифту між звичайною та жирною вагою. Я встановив це у своїх .emacs с(set-frame-font "DejaVu Sans Mono-10")

Отже, вам є з чим порівняти інформацію про шрифт "DejaVu Sans 10" через (font-info на Emacs 25):

(font-info "DejaVu Sans Mono-10")
["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" 
"DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:
width=normal:spacing=100:scalable=true" 13 17 0 0 0 8 13 4 8 8 
"/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" (opentype ((DFLT ...) )))]

EDIT на основі наступної інформації:

У наведеній вище інформації про шрифт я показую висоту шрифту 17 і ви повідомляєте про висоту 15 (звичайна) або 16 (жирною). У emacs 25 є додаткова інформація про шрифт після цих 3 0, зокрема, шрифт - 4.

Хоча в Emacs 24 або 25 у мене немає проблеми з DejaVu Sans Mono та Bold варіантом, найпростішим є використання шрифту та розміру, який не змінює ширину (як показано шрифтовою інформацією) між звичайним та напівжирним. або щось інше, ніж DejaVu.

Що стосується того, що викликає це, це може бути одна з ваших бібліотек (мій gtk - libgtk-x11-2.0.so.0), але я сумніваюся, що це саме ця бібліотека. Також сумнівайтеся, що це файл або пакет ttf. Більш імовірна вільна візуалізація (у мене є libfreetype.so.6). Оскільки DejaVu масштабується так само, як і інші шрифти, які працюють для вас, помилка обчислень, позначена способом написання DejaVu, пояснювала б, чому вони працюють у деяких розмірах, але не в інших.

Щоб перевірити, чи є проблема специфічною для Emacs чи ні, можливо, ви зможете відкрити два термінальних вікна, одне із жирним підказкою та одне без та порівняння міжрядкових інтервалів. Якщо він відрізняється від Emacs, це має відношення до візуалізації та / або шрифту.

Якщо ви компілювали emacs, там може щось статися.


Це не спрацювало ... (я використовував DejaVu Sans Mono-9BTW). Я оновлю опис вище ...
Edam

Шрифт рядка в режимі однаковий. Моно 10 проявляє таку ж поведінку, але 8 і 11пр ні! Це має бути пов'язане з візуалізацією шрифту та поверненням іншої висоти рядка для нормальної та жирної. Чи використовує Emacs fontconfig?
edam

1
Emacs не використовує fontconfig і, як правило, досить унікальний, що стосується вибору гліфів.
wasamasa

(font-info "DejaVu Sans Mono-10")дає мені ["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" "DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:width=normal:spacing=100:scalable=true" 13 15 0 0 0]. Я також fonts-dejavu-coreвстановив, також ttf-dejavu-core. Вони обидва надають DejaVuSansMono.ttf(у різних каталогах, але вони однакові файли, тому я не бачу, що це має значення). Я також отримую Height: 98від обличчя (при використанні DajaVu Sans Mono-10, де виявляється зазначена вище проблема). Я відкритий для будь-яких пропозицій! :)
edam

Зауважте, що деякі параметри вашої інформації про шрифт відрізняються. У мене "13 17 ...", а у вас "13 15 ..". І якщо ви отримаєте інформацію про шрифт для довідок, ви побачите, що перша різниця 17 (я) проти 15 (ви) - це висота. Тому спробуйте змінити висоту на 17.
скелястий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.