Bei einigen Unicode-Zeichen ist die Zeile, in der sie angezeigt werden, sehr groß. Zum Beispiel fügt ein schwerwiegender Akzent "̀" etwa 2,5 Zeilen darüber und darunter hinzu. Andere Zeichen, die dieses Verhalten verursachen, umfassen den griechischen Buchstaben "ϕ" (Phi) oder die Teilmenge "⫅". Andere Zeichen wie "Zuordnen" zu "⤇" fügen auf beiden Seiten nur etwa 0,5 Zeilen hinzu.
Ich bin auf dieses Problem gestoßen, als ich die Quelle gelesen habe, die julia-mode.el
eine große Anzahl solcher Zeichen für die LaTeX-Ersetzung enthält.
Warum tritt das auf und kann es behoben werden?
Edit: Ich benutze Ubuntu 14.04 LTS mit Emacs 24.3.1. Standardmäßig verwende ich die Schriftart "Ubuntu Mono 13", aber manchmal werden andere Schriftarten zum Anzeigen von Zeichen verwendet. Ich habe keine Pakete installiert, um Unicode explizit zu verwalten, und dieses Problem kann mit dem Befehl reproduziert werden emacs -Q
.
Antworten:
Dies liegt daran, dass Emacs unterschiedliche Schriftarten für verschiedene Teile des Unicode-Zeichensatzes verwendet. Sie können überprüfen, welche Schriftart verwendet wird, indem Sie den Cursor über ein Zeichen bewegen und auf drücken C-u C-x =. Zum Beispiel mit meiner Konfiguration über ein ASCII-Zeichen, das ich erhalte
nil:-apple-Consolas-medium-normal-normal-*-14-*-*-*-m-0-iso10646-1 (#x88)
, aber über ein ⧺, das ich erhaltenil:-apple-Symbola-medium-normal-normal-*-14-*-*-*-p-0-iso10646-1 (#xCE1)
(mit anderen Worten, es verwendet Consolas für ASCII und Symbola für einige Sonderzeichen). Unterschiedliche Schriftarten haben unterschiedliche Höhen, und Emacs lässt in der Zeilenhöhe immer genügend Platz, um die höchste Schrift anzuzeigen. Standardmäßig versucht Emacs, systemabhängige Schriftarten zu verwenden, die funktionieren. Dies führt jedoch häufig zu hässlichen Ergebnissen.Die Lösung, die ich für das Problem mit der Zeilenhöhe gefunden habe, ist leider ziemlich ärgerlich: Ich gehe die problematischen Zeichen durch, die ich finde, und
set-fontset-font
stelle sie auf eine Schriftgröße ein, die die Zeilenhöhe nicht beeinflusst. Der Code dafür ist in meiner Konfiguration verfügbar , aber hässlich und immer noch nicht perfekt. Wenn jemand eine bessere Lösung hat, wäre ich daran interessiert, sie zu hören.quelle
Ich benutze den Agda-Modus mit vielen mathematischen Symbolen und hatte das gleiche Problem. Früher war die einzige echte Lösung, wie @shosti vorschlägt: Anpassen der Schriftzuordnungen. In meinem Fall musste ich eine Reihe von Schriftarten deaktivieren, da Emacs, obwohl bestimmte Glyphen installiert waren, häufig die falsche auswählten (Anzeigefelder). Unter OSX schien es schlimmer zu sein, aber ich habe es auch unter Linux gesehen. Es reichte also nicht aus, nur die richtigen Schriftarten zu installieren.
Was ich jetzt mache, ist das exzellente Unicode-Font- Paket von Roland Walker . (Ich würde empfehlen, es über MELPA zu installieren.) Dies hat das Problem so gut wie vollständig beseitigt.
Ich füge dies in meine Init-Datei ein:
Ich verwende standardmäßig PragmataPro, aber jede andere Schriftart mit guter Abdeckung funktioniert auch, und Sie können die Dinge bei Bedarf mit dem Paket weiter anpassen.
quelle
Ich hatte dieses Problem bereits in einer anderen unbeantworteten Frage hier . Ich würde erwarten, dass verschiedene Schriftarten bei gleicher Größe die gleiche Höhe haben, aber dies scheint nicht der Fall zu sein, daher werde ich meinen Ad-hoc-Ansatz zeigen, um dies zu beheben.
Abgesehen von Akzenten und der Konzentration auf einfache Zeichen sind unterschiedliche Schriftarten erforderlich, um alle unterschiedlichen Zeichen anzuzeigen, da bei einigen Schriftarten ganze Zeichenblöcke weggelassen werden, die in anderen Schriftarten vorhanden sind. Installieren Sie eine Schriftart wie Symbola und lesen Sie die Liste der Schriftarten in der Readme-Datei des Unicode-Fonts- Pakets, um sicherzustellen, dass für ungewöhnliche Zeichen (z. B. "𝚫") mindestens eine Schriftart vorhanden ist .
Wenn Sie das Paket
unicode-fonts
und eine Reihe guter Schriftarten installieren , sollten alle Zeichen unterstützt werden, aber einige haben in Emacs falsche Anzeigehöhen.Angenommen, Monaco hat falsche Höhen, aber Symbola scheint die richtigen Höhen für mathematische Symbole zu haben (z. B. SUBSET OF C-x 8 REToder EQUAL TO; verwenden Sie oder
insert-char
, um verschiedene Zeichen zu testen.). In meinem Fall waren Noto Sans Symbols und Apple Symbols ausreichend, wenn Monaco nicht verwendet wurde. Eine gute Schriftart für mich war DejaVu Sans Mono.Das erste ist, dass Sie die
unicode-fonts
Verwendung von Monaco verbieten können, indem Sie es hinzufügenunicode-fonts-skip-fonts
. Welche Schriftart auch immer als nächstes ausgewählt wird, sie hat möglicherweise die richtige Höhe. Alternativ können Sie festlegenunicode-fonts
, dass für einen Unicode-Block eine bestimmte Schriftart verwendet werden soll (z. B. Mathematische Operatoren; hier ist eine Liste aller Blöcke ), indem Sie einen Eintrag von ändernunicode-fonts-block-font-mapping
.Das zweite ist, dass Sie dies einfach manuell für einen sehr präzisen Zeichensatz tun können, indem Sie verwenden
set-fontset-font
. Wenn Symbola eine gute Schriftart für mathematische Symbole ist (in diesem Fall der Bereich0x2100..0x23ff
), sollte Folgendes funktionieren:Andere Bereiche musste ich mich ändern waren
2000..206f
,27c0..27ff
,2900..2bff
,1d400..1d7ff
.Schließlich ist es nicht erforderlich, von Hand nach falsch konfigurierten Zeichen zu suchen. Vorausgesetzt, dass
unicode-fonts
installiert ist, generiert die folgende Funktion eine Liste aller Zeichen mit falschen Höhen:Beispielsweise:
und dann
würde alle schlechten mathematischen Symbole zeigen. Sie können dann überprüfen, mit welcher Schriftart sie angezeigt werden, und sie ändern.
Ich habe OS X 10.9.5, daher würden sich meine Schrifteinstellungen wahrscheinlich von Ihren unterscheiden. Es ist nicht erforderlich, zu installieren
unicode-fonts
; Sie können Ihre bevorzugten Schriftarten auch manuell festlegen,set-fontset-font
wenn Sie feststellen, dass die Standardeinstellungen von emacs nicht gut funktionieren.PS Es gibt eine Alternative: Wenn eine Schrift durchweg zu groß / klein ist, können Sie einen Eintrag hinzufügen
face-font-rescale-alist
, um Emacs anzuweisen, die Schriftgröße immer mit einem Faktor von beispielsweise 0,95 zu multiplizieren:Als ich das ausprobiert habe, hat es nicht ganz richtig funktioniert (mein Fehlerbericht ist hier ), aber dies ist auch ein möglicher Ansatz.
quelle
set-fontset-font
scheint der einzige zu sein, der tatsächlich benötigt wird. Ich musste zum Beispiel nur(set-fontset-font t '(#x1d400 . #x1d7ff) "Symbola")
bei der Frame-Erstellung auswerten (window-setup-hook
; damit es funktioniertemacs --daemon
) und das Paketttf-ancient-fonts
mit Symbola unter Debian installieren .Das ist ein Fehler; es ist im Kofferraum befestigt. Das Problem wird durch falsche Zeilenhöheninformationen bei TeX-Schriftarten verursacht, auf die Emacs zurückgreift, wenn kein Zeichen gefunden wird.
Der Bug-Thread auf Emacs-Bug hat eine Menge mehr Infos.
quelle