Mengapa ketinggian font berubah saat dicetak tebal?

9

Ini sangat menjengkelkan ...

Ketika teks pada garis diubah wajahnya sehingga teks menjadi tebal, ketinggian garis meningkat dengan (saya berasumsi) satu piksel. Paling baik ditunjukkan dengan gambar:

masukkan deskripsi gambar di sini

Kenapa ini? Bagaimana saya mencegahnya?


Seperti yang diminta, info di platform:

  • Debian GNU / Linux sid (tidak stabil) di amd64
  • Emacs menggunakan libgtk-3.so.0 (gtk 3.14.5), di XFCE 4.12

Saya sudah mencoba font berikut di 8pt, 9pt, 10pt dan 11pt:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Mono pembebasan

Masalahnya hanya terjadi pada DejaVu Sans Mono dan DejaVu Sans, dan hanya pada 9pt dan 10pt. (Gambar di atas menunjukkan DejaVu Sans Mono-9.)

edam
sumber
2
Anda harus melihat atribut face dari defunexample sebelum meletakkan spasi dan kemudian lagi pada setiap kata setelah memberi spasi antara defun dan contoh . Ini dilakukan dengan menempatkan kursor pada titik yang diinginkan lalu mengetik C-u C-x =. Anda mungkin akan menemukan bahwa baik wajah yang mempengaruhi pertahanan atau wajah yang mempengaruhi contoh memiliki atribut berbeda yang bertanggung jawab atas perilaku yang Anda lihat - misalnya, selain hanya warna dasar latar depan. Atribut wajah dapat dikustomisasi oleh pengguna.
lawlist
Bisakah Anda menambahkan sistem operasi dan window manager ke pertanyaan Anda, dan beberapa informasi tentang GUI yang digunakan Emacs Anda (mis. Gtk2, Gtk3, dll.)?
lunaryorn
@lawlist: terima kasih kawan. Dengan spasi, ini memiliki font-lock-function-name-face yang diterapkan, yang memiliki tinggi yang tidak ditentukan (jadi saya anggap default?). Tanpa spasi, tidak ada wajah yang diterapkan (jadi, sekali lagi, saya anggap default?) Default diatur dalam tema saya ke :height 90(9pt).
edam
@lawlist: beberapa penyelidikan lebih lanjut .... di tema, jika saya menghapus / menambah / menghapus / menambahkan :weight bolddari font-lock-function-name-face(dan menjalankan kembali custom-theme-set-facesperintah tema ), saya dapat melihat ketinggian defunbaris berubah sebesar 1px! Itu pasti atribut berani yang menyebabkannya, saya pikir.
edam
Tebakan saya berdasarkan komentar Anda adalah bahwa jenis huruf yang Anda pilih memiliki tinggi yang berbeda untuk atribut tebal, sehingga tidak dapat diubah kecuali jika Anda menguranginya secara manual - coba-coba dengan perlahan mengurangi ukuran titik. Atau, pilih keluarga yang tidak mengubah ketinggian ketika huruf tebal diterapkan. Saya pribadi tidak lagi menggunakan huruf tebal atau garis bawah pada salah satu tema khusus saya karena berbagai alasan yang berkaitan dengan efek visual dalam buffer - ketika saya membuat garis bawah untuk garis saat ini, itu dilakukan dengan overlay. Untuk huruf tebal, saya hanya menggunakan warna yang kuat - misalnya, magenta, kuning, ...
lawlist

Jawaban:

2

Perubahan tinggi font di DejaVu pada ukuran titik itu karena informasi ketinggian font antara dua huruf normal dan tebal berbeda ketika harus sama.

Font DejaVu Sans Mono 10 yang saya gunakan tidak mengubah ketinggian font antara bobot normal dan tebal. Saya mengaturnya di .emacs saya dengan(set-frame-font "DejaVu Sans Mono-10")

Jadi Anda memiliki sesuatu untuk dibandingkan, info untuk font "DejaVu Sans 10" melalui (font-info on 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 berdasarkan info selanjutnya:

Dalam informasi font di atas, saya menunjukkan ketinggian font 17 dan Anda melaporkan ketinggian 15 (normal) atau 16 (tebal). Di emacs 25 ada informasi font tambahan setelah 3 0 itu, khususnya font yang turun adalah 4.

Walaupun saya tidak memiliki masalah pada Emacs 24 atau 25 dengan DejaVu Sans Mono dan varian Bold, hal paling sederhana adalah menggunakan font dan ukuran yang tidak berubah lebar (seperti yang ditunjukkan oleh font-info) antara normal dan tebal atau sesuatu selain DejaVu.

Adapun apa yang menyebabkan ini, mungkin salah satu perpustakaan Anda, (gtk saya adalah libgtk-x11-2.0.so.0), tapi saya ragu itu akan menjadi perpustakaan khusus ini. Juga diragukan itu adalah file atau paket ttf. Lebih mungkin adalah rendering freetype (saya punya libfreetype.so.6). Karena DejaVu diskalakan seperti halnya font lain yang berfungsi untuk Anda, kesalahan perhitungan yang digelitik oleh cara DejaVu ditulis akan menjelaskan mengapa ini bekerja pada beberapa ukuran tetapi tidak pada yang lain.

Untuk memverifikasi apakah masalahnya khusus Emacs atau tidak, Anda mungkin dapat memunculkan dua jendela terminal, satu dengan prompt tebal dan satu tanpa dan membandingkan spasi jarak pada mereka. Jika berbeda seperti Emacs, maka ini ada hubungannya dengan rendering dan / atau font.

Jika Anda mengkompilasi emacs, mungkin ada sesuatu yang terjadi di sana.

berbatu
sumber
Ini tidak berhasil ... (Saya menggunakan DejaVu Sans Mono-9BTW). Saya akan memperbarui uraian di atas ...
edam
Font baris mode adalah sama. Mono 10 menunjukkan perilaku yang sama, tetapi 8 dan 11pr tidak! Pasti ada hubungannya dengan rendering font dan tinggi baris yang berbeda akan dikembalikan untuk normal dan tebal. Apakah Emacs menggunakan fontconfig?
edam
1
Emacs tidak menggunakan fontconfig dan umumnya agak unik dalam hal pemilihan glyph.
wasamasa
(font-info "DejaVu Sans Mono-10")memberi saya ["-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]. Saya juga telah fonts-dejavu-coremenginstal, dan juga ttf-dejavu-core. Keduanya menyediakan DejaVuSansMono.ttf(dalam direktori yang berbeda, tetapi mereka adalah file yang identik, jadi saya tidak melihat bahwa ini penting). Saya juga dapatkan Height: 98dari wajah (saat menggunakan DajaVu Sans Mono-10, yang menunjukkan masalah di atas). Saya terbuka untuk saran lagi! :)
edam
Perhatikan bahwa beberapa parameter info font Anda berbeda. Saya memiliki "13 17 ..." sementara Anda memiliki "13 15 ..". Dan jika Anda mendapatkan bantuan-untuk-fungsi font-info Anda akan melihat bahwa perbedaan pertama 17 (saya) vs 15 (Anda) adalah tinggi. Jadi cobalah mengubah ketinggian menjadi 17.
berbatu