TL; DR:確実に言う簡単な方法は何ですか:Consolasをデフォルトのフォントとして使用し、FreeMonoをConsolasでサポートされていない文字に、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)
私の理解が正しければ、これにより、Consolasが処理できない文字がFreeMonoで処理されるようになります。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マニュアル
fontset
間違った方法で考えています。Emacsは、フォントが表示方法を知っているかどうかにかかわらず、実際に表示するすべての文字をチェックしません。それは計算集約的すぎるでしょう。したがって、「フォールバック」メカニズム自体はありません。デフォルトのフォントを設定してから、特定の範囲でデフォルトのフォントセットを手動で変更して、異なるフォントを使用して表示する必要があります。この手順は手動で行うか、パッケージunicode
が役立つ場合があります。