Beberapa karakter Unicode menyebabkan garis yang ditampilkan cukup besar. Misalnya, aksen kubur "̀" menambahkan sekitar 2,5 baris ruang di atas dan di bawahnya. Karakter lain yang menyebabkan perilaku ini termasuk huruf Yunani "ϕ" (phi) atau subset-equal "⫅". Karakter lain seperti map-to "⤇" hanya menambahkan sekitar 0,5 baris di kedua sisi.
Saya mengalami masalah ini ketika membaca sumber julia-mode.el
yang berisi sejumlah besar karakter untuk substitusi LaTeX.
Mengapa ini terjadi, dan bisakah diperbaiki?
Sunting: Saya menggunakan Ubuntu 14.04 LTS dengan Emacs 24.3.1. Secara default saya menggunakan font "Ubuntu Mono 13" tetapi font lain kadang-kadang digunakan untuk menampilkan karakter. Saya telah menginstal tidak ada paket untuk secara eksplisit mengelola unicode, dan masalah ini dapat direproduksi menggunakan perintah emacs -Q
.
Jawaban:
Ini terjadi karena Emacs menggunakan font yang berbeda untuk bagian karakter Unicode yang berbeda. Anda dapat memverifikasi font apa yang digunakan dengan memposisikan kursor di atas karakter dan menekan C-u C-x =. Misalnya, dengan konfigurasi saya di atas karakter ASCII yang saya dapatkan
nil:-apple-Consolas-medium-normal-normal-*-14-*-*-*-m-0-iso10646-1 (#x88)
, tetapi lebih dari ⧺ yang saya dapatkannil:-apple-Symbola-medium-normal-normal-*-14-*-*-*-p-0-iso10646-1 (#xCE1)
(dengan kata lain, itu menggunakan Consolas untuk ASCII dan Symbola untuk beberapa karakter khusus). Font yang berbeda memiliki ketinggian yang berbeda, dan Emacs akan selalu memberikan ruang yang cukup di ketinggian garis untuk menampilkan font tertinggi. Secara default, Emacs akan mencoba menggunakan font yang bergantung pada sistem yang berfungsi, tetapi ini sering menyebabkan hasil yang buruk.Solusi yang saya temukan untuk masalah ketinggian garis sayangnya agak menjengkelkan: Saya menggunakan karakter bermasalah yang saya temukan dan gunakan
set-fontset-font
untuk mengaturnya ke font / ukuran yang tidak mempengaruhi ketinggian garis. Kode untuk melakukan ini tersedia dalam konfigurasi saya , tetapi itu jelek dan masih belum sempurna. Jika ada yang punya solusi yang lebih baik saya akan tertarik mendengarnya.sumber
Saya menggunakan agda-mode dengan banyak simbol matematika dan memiliki masalah yang sama. Dulu menjadi satu-satunya solusi nyata adalah seperti yang disarankan @shosti: mengkustomisasi pemetaan font. Dalam kasus saya, saya harus menonaktifkan sejumlah font karena walaupun saya telah menginstal font dengan mesin terbang tertentu, emacs akan sering memilih yang salah (menampilkan kotak). Tampaknya lebih buruk di OSX tapi saya sudah melihatnya di Linux juga. Jadi menginstal font yang tepat saja tidak cukup.
Apa yang saya lakukan sekarang adalah menggunakan paket unicode-font Roland Walker yang sangat baik . (Saya akan merekomendasikan menginstalnya melalui MELPA.) Ini cukup banyak menghilangkan masalah ini sepenuhnya.
Saya memasukkan ini ke file init saya:
Saya menggunakan PragmataPro secara default tetapi font lain dengan cakupan yang baik akan berfungsi juga dan Anda dapat menyesuaikan lebih lanjut dengan paket jika diperlukan.
sumber
Saya sudah memiliki masalah ini dalam pertanyaan yang belum terjawab berbeda di sini . Saya akan mengharapkan font yang berbeda pada ukuran yang sama memiliki ketinggian yang sama, tetapi sepertinya tidak demikian, jadi saya akan menunjukkan pendekatan ad-hoc saya untuk memperbaikinya.
Mengesampingkan aksen, dan hanya berfokus pada karakter biasa, font yang berbeda diperlukan untuk menampilkan semua karakter yang berbeda hanya karena beberapa font menghilangkan seluruh blok karakter yang ada pada font lain. Untuk memastikan bahwa karakter yang tidak umum (seperti "𝚫") memiliki setidaknya satu font untuk mereka, instal font seperti Symbola, dan lihat daftar font di readme dari paket unicode-fonts .
Jika Anda menginstal paket
unicode-fonts
dan sejumlah font yang bagus, semua karakter harus didukung, tetapi beberapa akan menampilkan ketinggian yang salah di emacs.Misalkan Monaco memiliki ketinggian yang tidak tepat, tetapi Symbola tampaknya memiliki ketinggian yang tepat untuk simbol matematika (seperti SUBSET OF ATAU SAMA DENGAN UAL; gunakan C-x 8 RETatau
insert-char
untuk menguji karakter yang berbeda.). Dalam kasus saya, tidak menggunakan Monako, Simbol Noto Sans dan Simbol Apple sudah cukup; satu font yang bagus untuk saya adalah DejaVu Sans Mono.Hal pertama adalah Anda bisa melarang
unicode-fonts
menggunakan Monako dengan menambahkannya keunicode-fonts-skip-fonts
; font apa pun yang dipilih selanjutnya mungkin memiliki ketinggian yang tepat. Atau, Anda dapat memintaunicode-fonts
untuk menggunakan font tertentu untuk blok Unicode (seperti Operator Matematika; di sini adalah daftar semua blok ) dengan memodifikasi entriunicode-fonts-block-font-mapping
.Yang kedua adalah Anda dapat dengan mudah melakukan ini secara manual untuk serangkaian karakter yang sangat tepat dengan menggunakan
set-fontset-font
. Jika Symbola adalah font yang bagus untuk simbol matematika (dalam hal ini jangkauan0x2100..0x23ff
), yang berikut ini akan berfungsi:Rentang lainnya yang saya butuhkan untuk memodifikasi sendiri adalah
2000..206f
,27c0..27ff
,2900..2bff
,1d400..1d7ff
.Akhirnya, tidak perlu mencari karakter yang salah konfigurasi dengan tangan. Dengan asumsi
unicode-fonts
diinstal, fungsi berikut akan menghasilkan daftar semua karakter dengan ketinggian yang salah:Sebagai contoh:
lalu
akan menunjukkan semua simbol matematika yang buruk. Anda kemudian dapat memeriksa dengan font mana mereka ditampilkan, dan mengubahnya.
Saya memiliki OS X 10.9.5, jadi pengaturan font saya kemungkinan akan berbeda dari milik Anda. Tidak perlu menginstal
unicode-fonts
; adalah mungkin untuk secara manual menentukan pilihan font pilihan Anda sepenuhnya melaluiset-fontset-font
setiap kali Anda menemukan bahwa pilihan default emacs tidak berfungsi dengan baik.PS Ada alternatif: ketika font secara konsisten terlalu besar / kecil, Anda dapat menambahkan entri
face-font-rescale-alist
untuk memberitahu emacs untuk selalu mengalikan ukuran font itu dengan faktor, katakanlah, 0,95, seperti:Ketika saya mencoba ini, itu tidak berfungsi dengan baik (laporan bug saya ada di sini ), tetapi ini juga merupakan pendekatan yang mungkin.
sumber
set-fontset-font
tampaknya satu-satunya yang diperlukan sebenarnya. Saya hanya perlu mengevaluasi, misalnya,(set-fontset-font t '(#x1d400 . #x1d7ff) "Symbola")
pada pembuatan bingkai (window-setup-hook
; untuk membuatnya bekerja denganemacs --daemon
), dan menginstal paket yangttf-ancient-fonts
menampilkan Symbola di bawah Debian .Ini adalah bug; itu diperbaiki di bagasi. Masalah ini disebabkan oleh informasi ketinggian garis yang buruk pada font TeX, yang kebetulan menjadi penyebab Emacs kembali jika tidak dapat menemukan karakter.
Utas bug pada emacs-bug memiliki lebih banyak info.
sumber