Niektóre znaki Unicode powodują, że linia, na której są wyświetlane, jest dość duża. Na przykład poważny akcent „̀” dodaje około 2,5 linii przestrzeni powyżej i poniżej. Inne znaki, które powodują takie zachowanie, to grecka litera „ϕ” (phi) lub równa podzbiór „⫅”. Inne znaki, takie jak map-to „⤇”, dodają tylko około 0,5 wiersza po każdej stronie.
Natknąłem się na ten problem podczas czytania źródła, julia-mode.el
które zawiera dużą liczbę takich znaków do podstawienia LaTeX.
Dlaczego tak się dzieje i czy można to naprawić?
Edycja: Używam Ubuntu 14.04 LTS z Emacsem 24.3.1. Domyślnie używam czcionki „Ubuntu Mono 13”, ale czasami inne czcionki są używane do wyświetlania znaków. Nie zainstalowałem żadnych pakietów, aby jawnie zarządzać Unicode, a ten problem można odtworzyć za pomocą polecenia emacs -Q
.
Odpowiedzi:
Dzieje się tak, ponieważ Emacs używa różnych czcionek dla różnych części zestawu znaków Unicode. Możesz sprawdzić, która czcionka jest używana, ustawiając kursor nad znakiem i naciskając C-u C-x =. Na przykład, gdy mam konfigurację nad postacią ASCII, dostaję
nil:-apple-Consolas-medium-normal-normal-*-14-*-*-*-m-0-iso10646-1 (#x88)
, ale dostaję ponad ⧺nil:-apple-Symbola-medium-normal-normal-*-14-*-*-*-p-0-iso10646-1 (#xCE1)
(innymi słowy, używa Consolas dla ASCII i Symbola dla niektórych znaków specjalnych). Różne czcionki mają różne wysokości, a Emacs zawsze zapewnia wystarczająco dużo miejsca na wysokości linii, aby wyświetlić najwyższą czcionkę. Domyślnie Emacs spróbuje użyć czcionek zależnych od systemu, które działają, ale często prowadzi to do brzydkich rezultatów.Rozwiązanie problemu wysokości linii, które znalazłem, jest niestety dość denerwujące: przeglądam problematyczne znaki, które znajduję, i używam
set-fontset-font
ich do ustawienia czcionki / rozmiaru, który nie wpływa na wysokość linii. Kod do tego jest dostępny w mojej konfiguracji , ale jest brzydki i wciąż nie jest idealny. Jeśli ktoś ma lepsze rozwiązanie, chciałbym go usłyszeć.źródło
Używam trybu agda z wieloma symbolami matematycznymi i miałem ten sam problem. Kiedyś było to jedyne prawdziwe rozwiązanie, jak sugeruje @shosti: dostosowywanie mapowań czcionek. W moim przypadku musiałem wyłączyć wiele czcionek, ponieważ chociaż miałem czcionki zainstalowane ze zdefiniowanymi konkretnymi glifami, emacs często wybierał niewłaściwy (wyświetlanie pól). Wydawało się gorzej na OSX, ale widziałem to również na Linuksie. Tak więc zainstalowanie odpowiednich czcionek nie wystarczyło.
Teraz używam doskonałego pakietu czcionek Unicode firmy Roland Walker . (Polecam zainstalować go za pośrednictwem MELPA.) To prawie całkowicie wyeliminowało problem.
Umieszczam to w moim pliku init:
Domyślnie używam PragmataPro, ale każda inna czcionka z dobrym pokryciem również będzie działać, a jeśli zajdzie taka potrzeba, możesz dodatkowo dostosować pakiet za pomocą pakietu.
źródło
Miałem już ten problem w innym pytaniu bez odpowiedzi tutaj . Spodziewałbym się, że różne czcionki o tym samym rozmiarze będą miały tę samą wysokość, ale wydaje się, że tak nie jest, więc pokażę moje ad hoc podejście do rozwiązania tego problemu.
Pomijając akcenty i skupiając się tylko na zwykłych znakach, różne czcionki są konieczne do wyświetlenia wszystkich różnych znaków po prostu dlatego, że niektóre czcionki pomijają całe bloki znaków obecnych w innych czcionkach. Aby upewnić się, że nietypowe znaki (takie jak „𝚫”) mają dla nich co najmniej jedną czcionkę, zainstaluj czcionkę taką jak Symbola i zobacz listę czcionek w pliku Readme pakietu czcionek Unicode .
Jeśli zainstalujesz pakiet
unicode-fonts
i kilka dobrych czcionek, wszystkie znaki powinny być obsługiwane, ale niektóre będą miały nieprawidłowo wyświetlane wysokości w emacs.Załóżmy, że Monako ma nieprawidłowe wysokości, ale wydaje się, że Symbola ma prawidłowe wysokości dla symboli matematycznych (takich jak SUBSET OF OR EQUAL TO ⊆; użyj C-x 8 RETlub
insert-char
do testowania różnych znaków.). W moim przypadku niewystarczające było użycie Monako, symboli Noto Sans i symboli Apple; jedną dobrą czcionką dla mnie była DejaVu Sans Mono.Pierwszą rzeczą jest to, że możesz zabronić
unicode-fonts
używania Monako, dodając go dounicode-fonts-skip-fonts
; każda wybrana czcionka może mieć odpowiednią wysokość. Alternatywnie możesz nakazaćunicode-fonts
użycie określonej czcionki dla bloku Unicode (takiego jak Operatory matematyczne; tutaj jest lista wszystkich bloków ) poprzez modyfikację wpisuunicode-fonts-block-font-mapping
.Po drugie, możesz łatwo to zrobić ręcznie, używając bardzo precyzyjnego zestawu znaków
set-fontset-font
. Jeśli Symbola jest dobrą czcionką dla symboli matematycznych (w tym przypadku zakres0x2100..0x23ff
), powinny działać:Inne zakresy musiałem zmodyfikować sobie były
2000..206f
,27c0..27ff
,2900..2bff
,1d400..1d7ff
.Wreszcie nie trzeba ręcznie wyszukiwać źle skonfigurowanych znaków. Zakładając, że
unicode-fonts
jest zainstalowany, następująca funkcja wygeneruje listę wszystkich znaków o nieprawidłowej wysokości:Na przykład:
i wtedy
pokaże wszystkie złe symbole matematyczne. Następnie możesz sprawdzić, za pomocą której czcionki są wyświetlane, i zmienić ją.
Mam OS X 10.9.5, więc moje ustawienia czcionek prawdopodobnie będą inne niż twoje. Instalacja nie jest konieczna
unicode-fonts
; możliwe jest ręczne ręczne wybranie preferowanych czcionek zaset-fontset-font
każdym razem, gdy okaże się, że domyślne wybory emacsa nie działają dobrze.PS Istnieje alternatywa: gdy czcionka jest stale zbyt duża / mała, możesz dodać wpis,
face-font-rescale-alist
aby powiedzieć emacsowi, aby zawsze pomnożył rozmiar tej czcionki przez, powiedzmy, 0,95, tak jak:Kiedy spróbowałem, nie działało to dobrze (mój raport o błędach jest tutaj ), ale jest to również możliwe podejście.
źródło
set-fontset-font
Wydaje się, że rada jest jedyną faktycznie potrzebną. Musiałem tylko ewaluować np.(set-fontset-font t '(#x1d400 . #x1d7ff) "Symbola")
Tworzenie ramek (window-setup-hook
; aby działałoemacs --daemon
) i zainstalować pakietttf-ancient-fonts
z Symbolą pod Debianem .To jest błąd; jest zamocowany w bagażniku. Problem jest spowodowany złą informacją o wysokości linii dla czcionek TeX, które są tymi, do których wraca Emacs, jeśli nie może znaleźć znaku.
Wątek błędu w emacs-bug zawiera znacznie więcej informacji.
źródło