TL; DR: ¿Cuál es una manera simple de decir de manera confiable: utilizar Consolas como fuente predeterminada, FreeMono para los caracteres no compatibles con Consolas y Symbola para los caracteres no compatibles con ambos?
Como mi fuente de programación principal no cubre todos los símbolos matemáticos que necesito, inicialmente configuré la reserva de fuentes como se muestra a continuación:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Desafortunadamente, esto también cambió la fuente de algunos de los caracteres que admite mi fuente principal, así que la cambié a
(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)
Si mi comprensión es correcta, esto debería garantizar que los caracteres que Consolas no puede manejar sean manejados por FreeMono, a menos que FreeMono no los tenga, en cuyo caso deberían mostrarse usando Symbola. También tengo entendido que t
hace lo mismo que "fontset-default"
arriba.
Desafortunadamente, todavía hubo casos en los que no se seleccionó la fuente correcta; Encontré que cambiar a
(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)
funcionó mejor, pero no siempre: cambiar el tamaño de fuente usando
(set-face-attribute 'default nil :height some-size)
causó que se ignoraran las fallas, debido a la creación de nuevos conjuntos de fuentes.
Mi solución actual es hacer
(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)
en cada conjunto de fuentes ( fontset-list
), después de cada cambio de tamaño de fuente.
¿Cuál es la forma correcta de configurar la reserva de fuentes?
Nota : para fines de prueba, aquí hay algunos caracteres matemáticos: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Referencias : Manual de Emacs sobre conjuntos de fuentes y modificación de conjuntos de fuentes
fontset
manera incorrecta. Emacs en realidad no verifica para cada carácter que muestra si una fuente sabe cómo mostrarlo o no. Eso sería demasiado computacionalmente intensivo. Por lo tanto, no existe un mecanismo "alternativo" per se. Debe configurar su fuente predeterminada y luego modificar el conjunto de fuentes predeterminado manualmente en ciertos rangos para mostrar usando diferentes fuentes. Este procedimiento es manual o quizás el paqueteunicode
pueda ayudar.Respuestas:
Para aquellos que no pueden leer la documentación de Emacs.
Selección de fuente
face-font-family-alternatives
Probado específicamente usando caracteres en la pregunta, verificando caracteres con
describe-character
. Cada personaje usa una de las fuentes gratuitas: Consolas, FreeMono, Symbola. Configurando la fuente del marco a Consola porset-frame-font
.14 votos positivos hasta ahora, respuesta rechazada, y la ciencia de la UE todavía no puede resolver ese misterio.
fuente
(setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))
, entoncesM-x set-frame-font RET Consolas RET
; los personajes usan una mezcla de Consolas y Segoe UI Symbol)emacs -Q
.M-x customize-variable
face-font-family-alternatives
Hay una lista que se parece a:
Agregue su secuencia en
customize
la interfaz del búfer:Cómo utilizar
face-font-family-alternatives
:En tu buffer: M-x set-frame-font
Elige una fuente de la lista. La fuente elegida definirá desde qué secuencia de búsqueda de fuente
face-font-family-alternatives
usar. En este ejemplo, Consolas .Para verificar qué familia de fuentes se utilizó para mostrar un carácter: M-x describe-char
fuente