Kalın olduğunda yazı tipi yüksekliği neden değişiyor?


9

Çok rahatsız edici...

Bir satırdaki herhangi bir metnin yüzü kalın olacak şekilde metni değiştiğinde, satırın yüksekliği tek bir piksel kadar artar (sanırım). En iyi görüntü ile gösterilir:

resim açıklamasını buraya girin

Bu neden? Nasıl önleyebilirim?


İstendiği gibi platformdaki bilgiler:

  • Amd64 üzerinde Debian GNU / Linux sid (kararsız)
  • Emacs, XFCE 4.12'de libgtk-3.so.0 (gtk 3.14.5) kullanıyor

Ben 8pt, 9pt, 10pt ve 11pt aşağıdaki yazı tiplerini denedim:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Kurtuluş Mono

Sorun yalnızca DejaVu Sans Mono ve DejaVu Sans ile ve sadece 9pt ve 10pt'de ortaya çıkar. (Yukarıdaki resim gösterilmektedir DejaVu Sans Mono-9.)


2
Bir boşluk koymadan önce defunexample öğesinin yüz özelliklerine, sonra da defun ve örnek arasında boşluk bıraktıktan sonra her kelimeye tekrar bakmalısınız . Bu, imleci istenen noktaya yerleştirip sonra yazarak yapılır C-u C-x =. Muhtemelen defun'u etkileyen yüzün veya örneği etkileyen yüzün gördüğünüz davranıştan sorumlu olan farklı niteliklere sahip olduğunu göreceksiniz - örneğin, yalnızca ön planın temel rengi dışında. Yüz nitelikleri kullanıcı tarafından özelleştirilebilir.
hukukçu

İşletim sisteminizi ve pencere yöneticinizi sorunuza ve Emacs'ınızın kullandığı GUI hakkında bazı bilgileri (örn. Gtk2, Gtk3, vb.) Ekleyebilir misiniz?
lunaryorn

@lawlist: teşekkürler dostum. Boşluk ile, belirtilmemiş bir yüksekliğe sahip font-lock-function-name-face uygulandı (bu yüzden varsayılanı varsayıyorum?). Boşluk olmadan, uygulanmış bir yüz yoktur (bu yüzden, yine varsayılanı :height 90varsayıyorum?) Temamda varsayılan (9pt) olarak ayarlanmıştır .
edam

@lawlist: I / ekleme / kaldırma kaldırırsanız biraz daha soruşturma .... tema, ekleme / :weight bolddan font-lock-function-name-face(ve temanın yeniden yürütmek custom-theme-set-facesben yüksekliğini görebilirsiniz komutu) defun1px satır değişikliği! Kesinlikle buna neden olan cesur özellik.
edam

Yorumlarınıza dayalı tahminim, seçtiğiniz yazı tipi ailesinin kalın nitelikler için farklı bir yüksekliğe sahip olması, bu yüzden manuel olarak azaltmadığınız sürece değiştirilemez - nokta boyutunu yavaşça azaltarak deneme ve hata. Alternatif olarak, kalın uygulandığında yüksekliği değişmeyen bir aile seçin. Kişisel olarak artık arabellekteki görsel efektlerle ilgili çeşitli nedenlerden ötürü özel temalarımda kalın veya alt çizgi kullanmıyorum - geçerli satır için bir alt çizgi oluşturduğumda, bir kaplama ile yapılır. Cesur için, sadece güçlü renkler kullanıyorum - örneğin, macenta, sarı, ...
hukukçu

Yanıtlar:


2

İki normal ve kalın yazı tipi arasındaki yazı tipi yüksekliği bilgileri aynı olması gerektiğinde farklı olduğundan, yazı tipi yüksekliği DejaVu'da bu nokta boyutunda değişir.

Kullandığım DejaVu Sans Mono 10 yazı tipi, yazı tipi yüksekliğini normal ve kalın ağırlık arasında değiştirmiyor. Bunu .emac'lerimde(set-frame-font "DejaVu Sans Mono-10")

Böylece, karşılaştırılacak bir şey var, "DejaVu Sans 10" yazı tipi ile bilgi (Emacs 25'te font-info):

(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 ...) )))]

Sonraki bilgilere dayanarak DÜZENLE:

Yukarıdaki yazı tipi bilgisinde, 17 yazı tipi yüksekliğini gösteririm ve 15 (normal) veya 16 (kalın) yüksekliğini bildirirsiniz. Emacs 25'te bu 3 0'lardan sonra ilave yazı tipi bilgisi vardır, özellikle yazı tipi inişi 4'tür.

DejaVu Sans Mono ve Bold varyantı ile Emacs 24 veya 25'te bir sorunum olmasa da, en basit şey normal ve kalın arasında genişliği değiştirmeyen bir yazı tipi ve boyut kullanmaktır (yazı tipi bilgisi ile gösterildiği gibi) veya DejaVu'dan başka bir şey.

Buna neyin sebep olduğunu, kütüphanelerinizden biri olabilir (benim gtk libgtk-x11-2.0.so.0), ama bu özel kütüphane olacağından şüpheliyim. Ayrıca şüphe ttf dosyası veya paket. Daha büyük olasılıkla freetype oluşturma (libfreetype.so.6 var). DejaVu sizin için işe yarayan diğer yazı tipleri gibi ölçeklendiğinden, DejaVu'nun yazılma biçimiyle işaretlenen bir hesaplama hatası, bunların neden bazı boyutlarda çalıştığını açıklarken diğerlerini açıklamayacaktır.

Sorunun Emacs'a özgü olup olmadığını doğrulamak için, biri kalın komut istemi ve diğeri olmadan iki terminal penceresi getirebilir ve üzerlerindeki satır aralığını karşılaştırabilirsiniz. Emacs gibi farklıysa, bunun oluşturma ve / veya yazı tipi ile ilgisi vardır.

Eğer emacs derlediyseniz orada bir şeyler olabilir.


Bu işe yaramadı ... ( DejaVu Sans Mono-9BTW kullanıyordum ). Yukarıdaki açıklamayı güncelleyeceğim ...
edam

Mod satırı yazı tipi aynı. Mono 10 aynı davranışı gösterir, ancak 8 ve 11pr yok! Yazı tipi oluşturma ve normal ve kalın için farklı bir satır yüksekliği döndürme ile ilgili bir şey olmalı. Emacs fontconfig kullanıyor mu?
edam

1
Emacs fontconfig'i kullanmaz ve glif seçimi söz konusu olduğunda genellikle benzersizdir .
wasamasa

(font-info "DejaVu Sans Mono-10")verir ["-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]. Ben de fonts-dejavu-coreyükledim ve ayrıca ttf-dejavu-core. Her ikisi de bir DejaVuSansMono.ttf(farklı dizinlerde, ancak aynı dosyaları vardır, bu yüzden bu önemli görmüyorum) sağlar. Ayrıca yüzden de alıyorum Height: 98(yukarıdaki sorunu gösteren DajaVu Sans Mono-10 kullanırken). Daha fazla öneriye açığım! :)
edam

Bazı yazı tipi bilgi parametrelerinizin farklı olduğuna dikkat edin. "13 15 ..." varken "13 17 ..." var. Ve işlev için yardım yazı tipi bilgisi alırsanız, 17 (ben) ve 15 (siz) arasındaki ilk farkın yükseklik olduğunu görürsünüz. Bu yüzden yüksekliği 17 olarak değiştirmeyi deneyin.
Kayalık
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.