Không hiển thị trong Emacs, làm thế nào để khắc phục?


7

Tôi đang chỉnh sửa một tệp văn bản chứa các ký tự kanji Nhật Bản. Không hiển thị trong Emacs, làm thế nào để khắc phục? Nó hiện lên như một số khoảng trắng.

Cập nhật :

Tôi đang sử dụng GNU Emacs 24.3 (9) cho Mac.

Sau khi kiểm tra .emacs, tôi thực sự đã sao chép từ cấu hình của người khác và đã

(create-fontset-from-fontset-spec
  "-unknown-Source Code Pro-normal-normal-normal-*-16-*-*-*-m-0-fontset-myfontset")
(set-fontset-font "fontset-myfontset" 'han "XinGothic CiticPress")
(set-fontset-font "fontset-myfontset" 'kana "HanaMinPlus")
(add-to-list 'default-frame-alist '(font . "fontset-myfontset"))

nhưng tôi không hiểu nó làm gì Rõ ràng nó không hoạt động đối với một số nhân vật Kanji.

Cập nhật 2

Tôi đã xác nhận phông chữ HanaMinPluscó thể hiển thị chính xác ký tự đó bằng cách đánh giá (set-frame-font "HanMinPlus" nil t)trong bộ đệm mini của tôi và quan sát hiển thị chính xác trong bộ đệm đầu. Nhưng tôi tự hỏi làm thế nào để chỉnh / sửa mã trên để cho phép nó tự động phát hiện và đặt phông chữ. Tôi không hiểu cách hoạt động của fontset trong Emacs. Nhưng

describe-fontset 

cho

Fontset: -apple-Menlo-medium-normal-normal-*-16-*-*-*-m-0-fontset-auto1

không myfontset. Và describe-fontcho

name (opened by): -apple-Menlo-medium-normal-normal-*-16-*-*-*-m-0-iso10646-1
       full name: Menlo-Regular
            size: 16
          height: 19
 baseline-offset:  0
relative-compose:  0

Cập nhật 3

Thí nghiệm 1

/Applications/Emacs.app/Contents/MacOS$ ./Emacs --no-init-file

và sau đó mở một tệp văn bản có chứa

すべての人間は、生まれながらにして自由であり、
かつ、尊厳と権利と について平等である。
人間は、理性と良心とを授けられており、
互いに同胞の精神をもって行動しなければならない。

Tôi thấy tất cả các nhân vật hiển thị chính xác. Và describe-fontvới lựa chọn mặc định cho thấy

name (opened by): -apple-Menlo-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1
       full name: Menlo-Regular
            size: 12
          height: 14
 baseline-offset:  0
relative-compose:  0

describe-fontsetcho thấy

Fontset: -apple-Menlo-medium-normal-normal-*-*-*-*-*-m-0-fontset-startup

Thí nghiệm 2

/Applications/Emacs.app/Contents/MacOS$ ./Emacs --no-site-file

và sau đó mở cùng một tệp thử nghiệm. Tôi thấy tất cả các nhân vật hiển thị chính xác. Và describe-fontvới lựa chọn mặc định cho thấy

name (opened by): -apple-Source_Code_Pro-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1
       full name: SourceCodePro-Regular
            size: 12
          height: 16
 baseline-offset:  0
relative-compose:  0

Tại sao nó không phải là cỡ chữ 16?!

describe-fontsetcho thấy

Fontset: -apple-Source_Code_Pro-medium-normal-normal-*-12-*-*-*-m-0-fontset-auto1

2
Bạn đang sử dụng phông chữ nào? Xem bạn có thể sử dụng cùng một phông chữ trong bộ đệm như trong phông chữ trong trình duyệt để đảm bảo ký tự được bao gồm trong bộ phông chữ đó không.
dgtized

Đối với những gì nó có giá trị, DejaVu Sans Mono hỗ trợ nhân vật đó trong Emacs.
Dân

@Dan: Bảng điều khiển Lucida cũng vậy, ít nhất là trên MS Windows - ví dụ: "-outline-Lucida Console-normal-normal-normal-mono-14- - - -c- -iso8859-1".
vẽ

@dgtized, làm thế nào để tìm ra phông chữ hiện tại? Tôi không được giáo dục nhiều về cài đặt phông chữ cho Emacs.
qazwsx

1
Tôi nghĩ rằng mã tôi trích dẫn trong bài viết gốc có nghĩa là sử dụng phông chữ phù hợp tùy thuộc vào bộ ký tự, tức là nếu đó là ký tự kana Nhật Bản, thì nên sử dụng "HanaMinPlus".
qazwsx

Câu trả lời:


3

Tôi không nghĩ bạn phải làm gì đặc biệt. Hãy nhớ rằng, có công nghệ thay thế phông chữ trong Mac OS X, Linux, MS Windows. Vì vậy, ngay cả khi phông chữ không chứa char, nó sẽ có khả năng hiển thị. Nhiều phông chữ được đề cập ở đây không thực sự chứa các bộ char Trung Quốc. Cụ thể, Menlo và DejaVu không chứa các ký tự Trung Quốc. (emacs của tôi được thiết lập để sử dụng DejaVu và không có bất kỳ cài đặt nào liên quan đến tiếng Trung Quốc.

Ngoài ra, tùy thuộc vào phân phối emacs bạn đang sử dụng trên máy Mac, họ có thể đã đóng gói phông chữ của riêng họ với các cài đặt trong site-start.el.

Tôi muốn giới thiệu những điều sau, hãy thử theo thứ tự, nếu không hoạt động, hãy thử mục tiếp theo:

  • Bắt đầu emacs với --no-init-file.
  • Bắt đầu emacs với --no-site-file.
  • Bắt đầu emacs với --no-site-file--no-init-file
  • Bắt đầu emacs với --no-site-file, chỉ với dòng này trong tệp init của bạn:(set-language-environment "UTF-8")

Nếu một trong những bước này hoạt động, thì bạn đã thu hẹp vấn đề.

Thật khó để theo dõi tại sao chính xác một nhân vật không hiển thị. Hệ điều hành khác nhau sử dụng công nghệ cho thuê phông chữ khác nhau và chúng không hoạt động 100% cho tất cả các ký tự. ví dụ: tôi đã cài đặt symbola phông chữ Unicode để hiển thị biểu tượng cảm xúc của Unicode 6, nhưng nhiều biểu tượng không hiển thị, cho đến khi tôi đặt riêng

;; specify font for all unicode characters
(when (member "Symbola" (font-family-list))
  (set-fontset-font t 'unicode "Symbola" nil 'prepend))

ở trên có sau:

(cond
 ((string-equal system-type "windows-nt") ; Microsoft Windows
  (when (member "DejaVu Sans Mono" (font-family-list))
    (add-to-list 'initial-frame-alist '(font . "DejaVu Sans Mono-10"))
    (add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10"))
    )
  )
 ((string-equal system-type "darwin")   ; Mac OS X
  (when (member "DejaVu Sans Mono" (font-family-list))
    (add-to-list 'initial-frame-alist '(font . "DejaVu Sans Mono-10"))
    (add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10")))
  )
 ((string-equal system-type "gnu/linux") ; linux
  (when (member "DejaVu Sans Mono" (font-family-list))
    (add-to-list 'initial-frame-alist '(font . "DejaVu Sans Mono-10"))
    (add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10")))
  )
 )

Cảm ơn; Tôi sẽ thêm những gì tôi tìm thấy vào bài viết gốc dưới dạng cập nhật.
qazwsx

2

Nếu bạn đang xem nó là một hình chữ nhật màu trắng (một hình chữ nhật rỗng màu đen) thì có lẽ có nghĩa là phông chữ của khuôn mặt hiện tại được sử dụng để hiển thị nó không hỗ trợ ký tự đó.

Hãy thử một phông chữ khác, mà bạn chắc chắn hỗ trợ nhân vật đó.

Trang này bao gồm nhiều cách khác nhau để kiểm tra và thay đổi phông chữ. Một số trong số chúng cho phép bạn kiểm tra trực quan hiệu quả của việc thay đổi phông chữ trước khi thực hiện, ví dụ: đạp xe giữa các phông chữ hoặc tập hợp con có sẵn của chúng.

[Nhưng bạn không nói bạn đang sử dụng phiên bản Emacs nào. Nếu bạn đang sử dụng Emacs 22 hoặc sớm hơn thì Emacs không có hỗ trợ Unicode. (Điều đó không ngụ ý rằng nó không thể hiển thị nhân vật, nhưng nó làm cho mọi thứ khác đi.)]

Có lẽ trang EmacsWiki trên bộ phông chữ này sẽ giúp bạn một chút.


1

Theo liên kết trong câu trả lời của @ Drew, có một số cách để chuyển qua các phông chữ để có được thứ bạn cần. Tôi sử dụng DejaVu Sans Mono và có thể xác nhận rằng nó có thể hiển thị ký tự, mặc dù tôi không chắc phông chữ tương tự trên máy Mac là gì. Nếu bạn có phông chữ đó (hoặc một phông chữ khác mà bạn có thể sử dụng ở vị trí của nó, chẳng hạn như Bảng điều khiển Lucida theo một trong các nhận xét của @ Drew), bạn có thể đánh giá các điều sau để đặt phông chữ của khung hiện tại (với cỡ chữ là 15):

(set-frame-font "DejaVu Sans Mono-15" nil t)

Nếu điều đó phù hợp với bạn, bạn có thể yêu cầu Emacs mặc định cho phông chữ đó bằng cách thêm vào default-frame-alistdòng có dòng sau trong tệp init của bạn:

(add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-15"))

Cảm ơn. Nhưng có cách nào để điều chỉnh mã cài đặt phông chữ hiện có mà không cần thực hiện lại không? Có gì sai với bản gốc của tôi?
qazwsx

1
Bước từng bước một. Hãy thử những gì Dan gợi ý đầu tiên, để xem nó có hiệu quả với bạn không. Nếu vậy, hãy thử mã bộ phông chữ của bạn bằng DejaVu, v.v., để xem nó có hoạt động không. Nếu có, hãy thử các phông chữ bạn muốn ở vị trí đầu tiên. Nếu mọi thứ không hoạt động tại một số điểm, bạn sẽ biết thêm về vấn đề là gì. Ví dụ, vấn đề có thể là phông chữ cụ thể và không nhất thiết là cách tiếp cận mã của bạn.
vẽ

1
Quan điểm của bạn ít nhiều được đưa ra cho Update2 trong bài viết gốc của tôi.
qazwsx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.