폰트 폴백을 어떻게 강력하게 설정합니까?


16

TL; DR : 확실하게 말하는 간단한 방법은 무엇입니까 : 기본 글꼴로 Consolas를 사용하고 Consolas가 지원하지 않는 문자에 대해서는 FreeMono를, 두 가지 모두 지원하지 않는 문자에 대해서는 Symbola를 사용 하시겠습니까?

내 주요 프로그래밍 글꼴이 필요한 모든 수학 기호를 다루지 않기 때문에 처음에는 아래와 같이 글꼴 대체를 설정합니다.

(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 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)

이해가 정확하다면, FreeMono가없는 경우가 아니라면 Consolas가 처리 할 수없는 문자를 FreeMono에서 처리 할 수 ​​있도록해야합니다.이 경우 Symbola를 사용하여 표시해야합니다. 위와 t동일한 기능 을 수행하는 것도 이해합니다 "fontset-default".

불행히도, 올바른 글꼴을 선택하지 않은 경우가 여전히있었습니다. 나는로 변경 발견

(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)

더 잘 작동했지만 항상 그런 것은 아닙니다.

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

새 글꼴 세트가 만들어져 대체가 무시되었습니다.

내 현재 솔루션은

(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-list각 글꼴 크기 변경 후 각 글꼴 세트 ( )에서

글꼴 대체를 설정하는 올바른 방법은 무엇입니까?

참고 : 테스트 목적으로 다음과 같은 수학 문자가 있습니다. ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
참조 : 글꼴 세트글꼴 세트 수정 에 대한 Emacs 매뉴얼


2
나는 당신의 문제를 실제로 해결하지는 않는다고 생각합니다. – 이론과 과학 문서에 수학 등의 기호가 필요하다면 TeX와 AucTeX를 사용하지 않겠습니까? X (또는 실행하는 것에 따라 Mac 또는 Windows) 글꼴 대체를 불필요하게 만들고 고품질 문서 및 코드 조각 (예 : 조직 모드)을 제공합니다.

나중에 생각할 것 : 전체 문자 세트가있는 UTF-8 글꼴은 문제를 완전히 제거해야합니다 (예 : GNU Unifont). 멋진 글꼴과 필요한 글리프 중 하나를 선택하면 후자를 선택합니다.

2
@kuli 당신은 너무 비관적입니다. 참조 github.com/cpitclaudel/monospacifier
이스타

나는 어디서 읽었는지 기억할 수 없지만 Eli Zaretskii가 어딘가에 비슷한 질문에 답했다고 생각합니다. 당신은 fontset잘못된 방식으로 생각하고 있습니다. Emacs는 글꼴에 표시 방법을 알고 있는지 여부를 표시하는 모든 문자를 실제로 확인하지는 않습니다. 너무 계산 집약적 일 것입니다. 따라서 "대체"메커니즘 자체는 없습니다. 기본 글꼴을 설정 한 다음 특정 범위에서 기본 글꼴 세트를 수동으로 수정하여 다른 글꼴을 사용하여 표시해야합니다. 이 절차는 수동이거나 패키지 unicode가 도움이 될 수 있습니다.
GenaU

@GenaU 나는 오해하지만 Emacs는 확인합니다; 모든 글꼴이 아니라 글꼴 집합에 나타나는 글꼴 만 있습니다.
Clément

답변:


0

Emacs의 문서를 읽을 수없는 사람들을 위해.

폰트 선택

Emacs가 그래픽 디스플레이에 문자를 그리려면 먼저 해당 문자에 대한 "글꼴"을 선택해야합니다. 일반적으로 Emacs는 해당 문자에 지정된면, 특히면 속성 ': family', ': weight', ': slant'및 ': width'에 따라 글꼴을 자동으로 선택합니다. 글꼴 선택은 표시 할 문자에 따라 다릅니다. 일부 글꼴은 제한된 문자 세트 만 표시 할 수 있습니다. 사용 가능한 글꼴이 요구 사항에 정확히 맞지 않으면 Emacs는 "가장 가까운 글꼴"을 찾습니다. 이 섹션의 변수는 Emacs가이 선택을 수행하는 방법을 제어합니다.

face-font-family-alternatives

문제의 문자를 사용하여 특별히 테스트하여 문자를 확인했습니다
describe-character. 각 문자는 무료 글꼴 중 하나 인 Consolas, FreeMono, Symbola를 사용합니다. Consola에 의해 프레임 폰트 설정 set-frame-font.

지금까지 14 개의 공감대가 있고, 공감대가 있으며, EU 과학은 여전히 ​​그 불신을 해결할 수 없습니다.


감사! 이 답변을 위의 내 의견에 대한 답변으로 게시하는 것이 아니라 별도의 답변입니까?
Clément

1
(내가 사용하는 내가 이맥스 (26)에, 너무 테스트를 명확히해야하고, 당신의 대답은 작동하지 않습니다 (setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))다음 M-x set-frame-font RET Consolas RET, 문자가 Consolas와 Segoe UI 기호의 혼합 사용)
클레망

Manjaro Arch Linux에서 다음 순서를 테스트했습니다. ℕ𝓟⧺ × ≠ ≥≤ ± ¬∨∧∃∀λ⟿⟹⊥⊤⊢; 일부 글꼴이 설치되지 않은 경우 어떻게되는지 테스트하지 않았습니다. 가능할 수 있습니다. 글꼴 이름은 기존 글꼴 목록이 아닌 수동으로 입력하기 때문입니다.
Alexandr Karbivnichiy

에 설치된 목록의 모든 글꼴을 테스트했습니다 emacs -Q.
Clément

@ Clément emacs -Q 옵션은 많은 영향을 미칩니다 : --no-x-resources. 아마도 문제는 그 안에있을 수 있습니다. 나를 위해 Consolas는이 문자 "×"에서만 시작합니다. 그리고 처음 두 "ℕ𝓟"FreeMono와 Symbola.
Alexandr Karbivnichiy

-1

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

다음과 같은 목록이 있습니다.

(("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"))

customize버퍼 인터페이스 에서 시퀀스를 추가하십시오 .

("Consolas" "FreeMono" "Symbola")

지정된 패밀리가 지정되었지만 존재하지 않는 경우이 변수는 대체 글꼴 패밀리를 지정합니다. 각 요소는 다음과 같은 형식이어야합니다.

 (FAMILY ALTERNATE-FAMILIES...)

FAMILY를 지정했지만 사용할 수없는 경우 Emacs는 ALTERNATE-FAMILIES에있는 다른 패밀리를 존재하는 패밀리를 찾을 때까지 하나씩 시도합니다.

사용 방법 face-font-family-alternatives:

당신은 버퍼에 : M-x set-frame-font

목록에서 글꼴을 선택하십시오. 선택한 글꼴은 face-font-family-alternatives사용할 글꼴 검색 순서를 정의 합니다. 이 예에서는 Consolas 입니다.

문자를 표시하는 데 사용 된 글꼴 모음을 확인하려면 M-x describe-char


감사! 그러나 나는 이것이 질문에 대답하지 않는다고 생각합니다. AFAICT에서 제안한 구성은 Consolas 글꼴을 사용할 수없는 경우 FreeMono를 사용하지만 Consolas에서 지원하지 않는 문자에 대해서는 FreeMono로 대체되지 않습니다.
Clément
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.