TL; DR: Qual é uma maneira simples de dizer com segurança: use o Consolas como a fonte padrão, o FreeMono para os caracteres não suportados pelo Consolas e o Symbola para os caracteres não suportados pelos dois?
Como minha fonte principal de programação não cobre todos os símbolos matemáticos de que preciso, configurei inicialmente o fallback da fonte, como mostrado abaixo:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Infelizmente, isso também mudou a fonte de alguns dos caracteres que minha fonte principal suporta, então mudei para
(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)
Se meu entendimento estiver correto, isso deve garantir que os caracteres que Consolas não podem manipular sejam manipulados pelo FreeMono, a menos que o FreeMono não os possua, caso em que devem ser exibidos usando o Symbola. Também entendo que t
faz o mesmo que "fontset-default"
acima.
Infelizmente, ainda havia casos em que a fonte correta não foi selecionada; Eu descobri que mudar para
(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)
funcionou melhor, mas nem sempre: alterar o tamanho da fonte usando
(set-face-attribute 'default nil :height some-size)
fez com que os fallbacks fossem ignorados devido à criação de novos conjuntos de fontes.
Minha solução atual é fazer
(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)
em cada conjunto de fontes ( fontset-list
), após cada alteração no tamanho da fonte.
Qual é a maneira correta de definir fallback de fonte?
Nota : para fins de teste, aqui estão alguns caracteres matemáticos: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Referências : Manual do Emacs sobre conjuntos de fontes e modificação de conjuntos de fontes
fontset
da maneira errada. O Emacs, na verdade, não verifica cada caractere exibido, se uma fonte sabe como exibi-lo ou não. Isso seria muito computacionalmente intensivo. Portanto, não existe um mecanismo de "fallback" em si. Você deve definir sua fonte padrão e modificar o conjunto de fontes padrão manualmente em determinados intervalos para exibir usando fontes diferentes. Este procedimento é manual ou talvez o pacote unicode
possa ajudar.