単 erscheint nicht in Emacs, wie behebt man das?


7

Ich bearbeite eine Textdatei mit japanischen Kanji-Zeichen. 単 erscheint nicht in Emacs, wie behebt man das? Es zeigt sich als eine Art weißer Raum.

Update :

Ich verwende GNU Emacs 24.3 (9) für Mac.

Nachdem .emacsich meine überprüft habe , habe ich tatsächlich von der Konfiguration eines anderen kopiert und habe

(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"))

aber ich verstehe nicht ganz, was es tut. Anscheinend funktioniert es bei einigen Kanji-Charakteren nicht.

Update 2

Ich habe bestätigt, dass die Schriftart HanaMinPlusdieses Zeichen korrekt anzeigen kann, indem sie (set-frame-font "HanMinPlus" nil t)in meinem Minipuffer ausgewertet und beobachtet wird, wie sie korrekt im Arbeitspuffer angezeigt wird. Aber ich frage mich, wie ich den obigen Code optimieren / korrigieren kann, damit er die Schriftart automatisch erkennt und einstellt. Ich verstehe nicht, wie Fontset in Emacs funktioniert. Aber

describe-fontset 

gibt

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

nicht myfontset. Und describe-fontgibt

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

Update 3

Versuch 1

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

und öffnen Sie dann eine Textdatei mit

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

Ich sehe alle Zeichen richtig angezeigt. Und describe-fontmit Standardauswahl zeigt

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

und describe-fontsetzeigt

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

Experiment 2

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

und öffnen Sie dann dieselbe Testdatei. Ich sehe alle Zeichen richtig angezeigt. Und describe-fontmit Standardauswahl zeigt

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

Warum ist es nicht Schriftgröße 16?!

und describe-fontsetzeigt

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

2
Welche Schriftart verwenden Sie derzeit? Überprüfen Sie, ob Sie im Puffer dieselbe Schriftart wie im Browser verwenden können, um sicherzustellen, dass das Zeichen in diesem Schriftartensatz enthalten ist.
Dgtized

DejaVu Sans Mono unterstützt diesen Charakter in Emacs.
Dan

@ Dan: Lucida Console auch, zumindest unter MS Windows - z. B. "-outline-Lucida Console-normal-normal-normal-mono-14- - - -c- -iso8859-1".
Drew

@dgtized, wie finde ich die aktuelle Schriftart heraus? Ich bin nicht sehr gut darin ausgebildet, Schriftarten für Emacs einzustellen.
Qazwsx

1
Ich dachte, der Code, den ich im ursprünglichen Beitrag zitiert habe, soll abhängig von den Zeichensätzen eine geeignete Schriftart verwenden. Wenn es sich also um japanische Kana-Zeichen handelt, sollte "HanaMinPlus" verwendet werden.
Qazwsx

Antworten:


3

Ich glaube nicht, dass Sie etwas Besonderes tun müssen. Denken Sie daran, dass es unter Mac OS X, Linux und MS Windows eine Technologie zum Ersetzen von Schriftarten gibt. Selbst wenn die Schriftart das Zeichen nicht enthält, wird sie wahrscheinlich angezeigt. Viele der hier erwähnten Schriftarten enthalten keine chinesischen Zeichensätze. Insbesondere enthalten Menlo und DejaVu keine chinesischen Schriftzeichen. (Mein Emacs ist so eingestellt, dass er DejaVu verwendet, und ohne Einstellungen in Bezug auf Chinesisch. Aber Chinesisch zeigt sich gut (einschließlich 単). Dies war unter Ubuntu Linux, Microsoft Windows 7 und Mac OS X der Fall.)

Abhängig davon, welche Emacs-Distribution Sie auf dem Mac verwenden, haben sie wahrscheinlich ihre eigene Schriftart mit Einstellungen in gebündelt site-start.el.

Ich würde Folgendes empfehlen, versuchen Sie es in der richtigen Reihenfolge, wenn es nicht funktioniert, versuchen Sie es mit dem nächsten Punkt:

  • Starten Sie Emacs mit --no-init-file.
  • Starten Sie Emacs mit --no-site-file.
  • Starten Sie Emacs mit --no-site-fileund--no-init-file
  • Starten Sie Emacs mit --no-site-filenur dieser Zeile in Ihrer Init-Datei:(set-language-environment "UTF-8")

Wenn einer dieser Schritte funktioniert, haben Sie das Problem eingegrenzt.

Es ist schwer herauszufinden, warum genau ein Zeichen nicht angezeigt wird. Unterschiedliche Betriebssysteme verwenden unterschiedliche Technologien zum Ersetzen von Schriftarten und funktionieren nicht zu 100% für alle Zeichen. zB Ich habe Unicode-Schriftsymbole für die Anzeige der Emicons von Unicode 6 installiert, aber viele werden nicht angezeigt, bis ich sie speziell festgelegt habe

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

das obige kommt nach:

(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")))
  )
 )

Vielen Dank; Ich werde das, was ich gefunden habe, als Update in den ursprünglichen Beitrag einfügen.
Qazwsx

2

Wenn Sie es als weißes Rechteck (ein schwarzes hohles Rechteck) sehen, bedeutet dies wahrscheinlich, dass die Schriftart des aktuellen Gesichts, mit dem es angezeigt wird, dieses Zeichen nicht unterstützt.

Versuchen Sie es mit einer anderen Schriftart, die dieses Zeichen sicher unterstützt.

Diese Seite enthält verschiedene Möglichkeiten zum Überprüfen und Ändern von Schriftarten. Mit einigen von ihnen können Sie die Auswirkungen des Änderns von Schriftarten visuell überprüfen, bevor Sie dies tun, z. B. indem Sie zwischen den verfügbaren Schriftarten oder Teilmengen von ihnen wechseln.

[Sie sagen jedoch nicht, welche Emacs-Version Sie verwenden. Wenn Sie Emacs 22 oder früher verwenden, unterstützt Emacs Unicode nicht. (Das bedeutet nicht, dass es den Charakter nicht zeigen kann, aber es macht die Dinge anders.)]

Vielleicht hilft Ihnen diese EmacsWiki-Seite über Schriftarten ein bisschen.


1

Gemäß dem Link in der Antwort von @ Drew gibt es verschiedene Möglichkeiten, durch Schriftarten zu blättern, um die gewünschte zu erhalten. Ich verwende DejaVu Sans Mono und kann bestätigen, dass das Zeichen 単 angezeigt werden kann, obwohl ich nicht sicher bin, welche analoge Schriftart auf einem Mac verwendet wird. Wenn Sie diese Schriftart haben (oder eine andere, die Sie an ihrer Stelle verwenden können, z. B. Lucida Console gemäß einem der Kommentare von @ Drew), können Sie Folgendes bewerten, um die Schriftart des aktuellen Rahmens festzulegen (mit einer Schriftgröße von 15):

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

Wenn dies für Sie funktioniert, können Sie Emacs anweisen, diese Schriftart standardmäßig zu verwenden, indem Sie sie default-frame-alistmit der folgenden Zeile in Ihrer Init-Datei ergänzen:

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

Vielen Dank. Aber gibt es eine Möglichkeit, den vorhandenen Code zum Festlegen von Schriftarten anzupassen, ohne ihn erneut auszuführen? Was ist los mit meinem Original?
Qazwsx

1
Machen Sie einen Schritt nach dem anderen. Versuchen Sie zuerst, was Dan vorschlägt, um zu sehen, ob es für Sie funktioniert. Wenn dies der Fall ist, versuchen Sie Ihren Fontset-Code mit DejaVu usw., um festzustellen, ob dies funktioniert. Wenn dies der Fall ist, probieren Sie zunächst die gewünschten Schriftarten aus. Wenn die Dinge irgendwann nicht mehr funktionieren, wissen Sie mehr darüber, wo das Problem liegt. Das Problem könnte beispielsweise die bestimmte Schriftart sein und nicht unbedingt Ihr Code-Ansatz.
Drew

1
Ihr Punkt ist angesichts des Updates2 in meinem ursprünglichen Beitrag mehr oder weniger umstritten.
Qazwsx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.