Tôi đã có vấn đề này trong một câu hỏi chưa được trả lời khác ở đây . Tôi hy vọng các phông chữ khác nhau có cùng kích thước sẽ có cùng độ cao, nhưng dường như điều này không đúng, vì vậy tôi sẽ chỉ ra cách tiếp cận đặc biệt của mình để khắc phục điều này.
Bỏ các điểm nhấn sang một bên và chỉ tập trung vào các ký tự đơn giản, các phông chữ khác nhau là cần thiết để hiển thị tất cả các ký tự khác nhau đơn giản vì một số phông chữ bỏ qua toàn bộ các khối ký tự có trong các phông chữ khác. Để đảm bảo rằng các ký tự không phổ biến (chẳng hạn như "") có ít nhất một phông chữ cho chúng, hãy cài đặt một phông chữ như Symbola và xem danh sách các phông chữ trong readme của gói phông chữ unicode .
Nếu bạn cài đặt gói unicode-fonts
và một số phông chữ tốt, tất cả các ký tự sẽ được hỗ trợ, nhưng một số sẽ có chiều cao hiển thị sai trong emacs.
Giả sử rằng Monaco có độ cao không chính xác, nhưng Symbola dường như có độ cao chính xác cho các ký hiệu toán học (chẳng hạn như SUBSET OF ORALAL TO ⊆; sử dụng C-x 8 REThoặc insert-char
để kiểm tra các ký tự khác nhau.). Trong trường hợp của tôi, không sử dụng Biểu tượng của Monaco, Biểu tượng Noto Sans và Biểu tượng Apple là đủ; một phông chữ tốt cho tôi là DejaVu Sans Mono.
Điều đầu tiên là bạn có thể cấm unicode-fonts
sử dụng Monaco bằng cách thêm nó vào unicode-fonts-skip-fonts
; bất cứ phông chữ nào nó chọn tiếp theo có thể có chiều cao phù hợp. Ngoài ra, bạn có thể yêu unicode-fonts
cầu sử dụng một phông chữ cụ thể cho khối Unicode (chẳng hạn như Toán tử toán học; đây là danh sách tất cả các khối ) bằng cách sửa đổi mục nhập unicode-fonts-block-font-mapping
.
Thứ hai là bạn có thể dễ dàng làm điều này bằng tay cho một bộ ký tự rất chính xác bằng cách sử dụng set-fontset-font
. Nếu Symbola là một phông chữ tốt cho các ký hiệu toán học (trong trường hợp này là phạm vi 0x2100..0x23ff
), thì những điều sau đây sẽ hoạt động:
(set-fontset-font t '(#x2100 . #x23ff)
;; this should throw an error if there is no such font
(font-xlfd-name (find-font (font-spec :family "Symbola"))))
Phạm vi khác tôi cần phải thay đổi bản thân mình là 2000..206f
, 27c0..27ff
, 2900..2bff
, 1d400..1d7ff
.
Cuối cùng, không cần thiết phải tìm kiếm các ký tự được cấu hình sai bằng tay. Giả sử đã unicode-fonts
được cài đặt, chức năng sau đây sẽ tạo danh sách tất cả các ký tự có độ cao không chính xác:
(defun debug-unicode-heights (&optional block-name)
"Find all characters in a given block that have incorrect heights.
BLOCK-NAME can be anything that
`unicode-fonts-debug-insert-block' accepts, such as `'all-math',
or a string naming a Unicode block."
(interactive "sBlock name:")
(unless block-name (setq block-name 'all-math))
(let ((buffer (generate-new-buffer (format "debug-unicode-heights:%s" block-name)))
expected-height
bad-characters)
(pop-to-buffer buffer)
(with-current-buffer buffer
(unicode-fonts-debug-insert-block block-name)
(goto-char (point-min))
(setq expected-height (line-pixel-height))
;; (message "Expected height %d" expected-height)
(while (< (point) (point-max))
(if (or (= (line-pixel-height) expected-height)
;; Some characters are invalid, they have no name
;; (their name is just their hex code), and their
;; heights do not matter to us.
(looking-at-p "^.[^\"]*\"#"))
(delete-region (line-beginning-position)
(1+ (line-end-position)))
(push (char-after (line-beginning-position)) bad-characters)
(forward-line))))
;; (display-message-or-buffer buffer)
(apply #'string (reverse bad-characters))))
Ví dụ:
M-: (debug-unicode-heights 'all-math)
và sau đó
M-: (debug-unicode-heights 'all-greek)
sẽ hiển thị tất cả các biểu tượng toán học xấu. Sau đó, bạn có thể kiểm tra xem chúng được hiển thị với phông chữ nào và thay đổi nó.
Tôi có OS X 10.9.5, vì vậy cài đặt phông chữ của tôi có thể khác với cài đặt của bạn. Không cần thiết phải cài đặt unicode-fonts
; có thể chỉ định thủ công các lựa chọn phông chữ ưa thích của bạn hoàn toàn thông qua set-fontset-font
bất cứ khi nào bạn thấy các lựa chọn mặc định của emacs không hoạt động tốt.
PS Có một cách khác: khi một phông chữ luôn quá lớn / nhỏ, bạn có thể thêm một mục face-font-rescale-alist
để nói với emacs luôn nhân kích thước của phông chữ đó với hệ số 0,95, như vậy:
(add-to-list 'face-font-rescale-alist (cons (font-spec :family "STIXGeneral") 0.95) t)
Khi tôi thử điều này, nó không hoạt động tốt (báo cáo lỗi của tôi ở đây ), nhưng đây cũng là một cách tiếp cận có thể.