Yazı tipi yedeğini sağlam bir şekilde nasıl ayarlarım?


16

TL; DR: Güvenilir bir şekilde söylemenin basit yolu nedir: varsayılan yazı tipi olarak Consolas, Consolas tarafından desteklenmeyen karakterler için FreeMono ve her ikisi tarafından desteklenmeyen karakterler için Symbola kullanın?

Ana programlama yazı tipim ihtiyacım olan tüm matematiksel sembolleri kapsamadığından, başlangıçta yazı tipi yedeğini aşağıda gösterildiği gibi ayarladım:

(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)

Ne yazık ki bu, ana yazı tipimin desteklediği bazı karakterlerin yazı tipini de değiştirdi, bu yüzden onu

(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)

Anlayışım doğruysa, bu, Consolas'ın işleyemediği karakterlerin, FreeMono'da yoksa, FreeMono tarafından ele alınmasını sağlamalıdır, bu durumda Symbola kullanılarak gösterilmelidir. Benim anlayışım tda "fontset-default"yukarıdaki ile aynıdır .

Ne yazık ki, hala doğru yazı tipinin seçilmediği durumlar vardı; Bunu değiştirerek buldum

(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Symbola") nil 'append)

daha iyi çalıştı, ancak her zaman değil: kullanarak yazı tipi boyutunu değiştirme

(set-face-attribute 'default nil :height some-size)

yeni yazı tiplerinin oluşturulması nedeniyle yedeklerin yok sayılmasına neden oldu.

Şu anki çözümüm

(set-fontset-font fontset 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font fontset 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font fontset 'unicode (font-spec :name "Symbola") nil 'append)

fontset-listher yazı tipi boyutu değişikliğinden sonra her yazı tipinde ( ).

Yazı tipi yedeklemesini ayarlamanın doğru yolu nedir?

Not : test amacıyla birkaç matematik karakteri aşağıda verilmiştir: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Referanslar : Yazı tiplerinde ve yazı tiplerinde değişiklik yapma emacs kılavuzu


2
Sorununuzu gerçekten çözmeyen bir düşüncem var, ama –– teoremler ve bilimsel belgeler için matematiksel vb. Sembollere ihtiyacınız varsa, neden TeX ve AucTeX'i bunun için kullanmıyorsunuz? X (veya çalıştırdığınıza bağlı olarak Mac veya Windows) yazı tipi yedeklerini gereksiz hale getirir ve yüksek kaliteli belgeler ve snippet'ler sağlar (ör. Kuruluş modu için).

sonradan düşünülmüş: Tam karakter setine sahip bir UTF-8 yazı tipi, sorununuzu tamamen ortadan kaldırmalıdır (örn. GNU Unifont) ve süslü yazı tipi ile gerekli glifler arasında seçim yapıldığında, ikincisini seçerim.

2
@kuli Çok kötümsersin. Bkz. Github.com/cpitclaudel/monospacifier
Ista

Nerede okuduğumu hatırlamıyorum, ancak Eli Zaretskii'nin benzer bir soruya bir yerde cevap verdiğine inanıyorum. fontsetYanlış şekilde düşünüyorsun . Emacs, bir yazı tipinin nasıl görüntülenip görüntülenmeyeceğini bildiği her karakteri kontrol etmez. Bu, hesaplama açısından çok yoğun olurdu. Yani kendi başına "geri dönüş" mekanizması yoktur. Varsayılan yazı tipinizi ayarlamanız ve ardından farklı yazı tiplerini kullanarak görüntülemek için belirli aralıklarda varsayılan yazı tipini el ile değiştirmeniz gerekir. Bu prosedür manueldir veya paket size unicodeyardımcı olabilir.
GenaU

@GenaU Yanlış anlama olabilir, ama Emacs kontrol eder; her yazı tipi değil, yalnızca yazı tipinde görünen yazı tipleri.
Clément

Yanıtlar:


0

Emacs'ın belgelerini okuyamayanlar için.

Yazı Tipi Seçimi

Emacs'ın grafik ekranda bir karakter çizebilmesi için, o karakter için bir “yazı tipi” seçmesi gerekir. Normalde, Emacs otomatik olarak bu karaktere atanan yüzlere göre bir yazı tipi seçer - özellikle ': family', ': weight', ': slant' ve ': width' yüz nitelikleri. Yazı tipi seçimi, görüntülenecek karaktere de bağlıdır; bazı yazı tipleri yalnızca sınırlı sayıda karakter görüntüleyebilir. Mevcut yazı tipi gereksinimlere tam olarak uymuyorsa, Emacs “en yakın eşleşen yazı tipini” arar. Bu bölümdeki değişkenler Emacs'ın bu seçimi nasıl yapacağını kontrol eder.

face-font-family-alternatives

Özel olarak sorudaki karakterler kullanılarak test edilir, ile karakterler kontrol edilir
describe-character. Her karakter ücretsiz fontlardan birini kullanır: Consolas, FreeMono, Symbola. Çerçeve yazı tipini Consola'ya göre ayarlama set-frame-font.

Şimdiye kadar 14 oy, cevap aşağı oy verildi ve AB bilimi hala bu mistery'i çözemiyor.


Teşekkürler! Bunu ayrı bir cevap olmak yerine yukarıdaki yorumuma bir yanıt olarak göndermeyi düşündünüz mü?
Clément

1
(Emacs 26'da da test ettiğimi açıklığa kavuşturmalıyım ve cevabınız işe yaramıyor: (setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))O zaman kullandım M-x set-frame-font RET Consolas RET; karakterler Consolas ve Segoe UI Sembolünün bir karışımını kullanıyor)
Clément

Manjaro Arch Linux üzerinde şu sırayı test ettim: ℕ𝓟⧺ × ≠ ≥≤ ± ¬∨∧∃∀λ⟿⟹⊥⊤⊢; Bazı yazı tipi yüklü değilse ne olduğunu test etmedim. Bu mümkün olabilir. Çünkü font adları mevcut olanların listesinden değil manuel olarak girilir.
Alexandr Karbivnichiy

Listedeki tüm fontları yükledim emacs -Q.
Clément

@ Clément emacs -Q seçeneği çok şey ifade ediyor: --no-x-resources. Belki de sorun yatıyor. Benim için, Consolas sadece şu karakterden başlıyor: "×". Ve ilk iki "ℕ𝓟" FreeMono ve Symbola.
Alexandr Karbivnichiy

-1

M-x customize-variable face-font-family-alternatives

Şuna benzeyen bir liste var:

(("Monospace" "courier" "fixed")
 ("Monospace Serif" "Courier 10 Pitch" "Consolas" "Courier Std" "FreeMono" "courier" "fixed")
 ("courier" "CMU Typewriter Text" "fixed")
 ("Sans Serif" "helv" "helvetica" "arial" "fixed")
 ("helv" "helvetica" "arial" "fixed"))

Sıralamanızı customizearabellek arayüzüne ekleyin :

("Consolas" "FreeMono" "Symbola")

Belirli bir aile belirtilmiş ancak mevcut değilse, bu değişken denenecek alternatif yazı tipi ailelerini belirtir. Her elemanın bu formu olmalıdır:

 (FAMILY ALTERNATE-FAMILIES...)

AİLE belirtilmiş ancak mevcut değilse Emacs, ALTERNATİF AİLE'de verilen diğer aileleri, var olan bir aileyi bulana kadar birer birer deneyecektir.

Nasıl kullanılır face-font-family-alternatives:

Tamponda: M-x set-frame-font

Listeden bir yazı tipi seçin. Seçilen yazı tipi, hangi yazı tipi arama sırasının face-font-family-alternativeskullanılacağını tanımlar . Bu örnekte Consolas .

Bir karakteri görüntülemek için hangi font ailesinin kullanıldığını kontrol etmek için: M-x describe-char


Teşekkürler! Ama bunun soruyu cevapladığını sanmıyorum. AFAICT, Consolas yazı tipi yoksa önerdiğiniz yapılandırma FreeMono'yu kullanır, ancak Consolas tarafından desteklenmeyen karakterler için FreeMono'ya geri dönmez.
Clément
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.