単はEmacsに表示されません、どのように修正しますか?


7

日本語の漢字を含むテキストファイルを編集しています。単はEmacsに表示されません、どのように修正しますか?それはある種の空白として現れます。

更新

MacではGNU Emacs 24.3(9)を使用しています。

私を調べた後.emacs、私は実際に他の誰かの設定からコピーして、

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

しかし、それが何をするのかよくわかりません。一部の漢字では動作しないようです。

アップデート2

私のミニバッファーでHanaMinPlus評価(set-frame-font "HanMinPlus" nil t)し、スクラッチバッファーで正しく表示されることを確認することで、フォントがその文字を正しく表示できることを確認しました。しかし、上記のコードを微調整/修正して、フォントを自動的に検出および設定する方法を知りたいと思います。Emacsでフォントセットがどのように機能するのかわかりません。だが

describe-fontset 

与える

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

ないmyfontset。そしてdescribe-font与える

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

アップデート3

実験1

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

次に、次を含むテキストファイルを開きます

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

すべてのキャラクターが正しく表示されます。そしてdescribe-fontデフォルトの選択で

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-fontsetショー

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

実験2

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

同じテストファイルを開きます。すべてのキャラクターが正しく表示されます。そしてdescribe-fontデフォルトの選択で

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

フォントサイズが16でないのはなぜですか?

そしてdescribe-fontsetショー

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

2
現在どのフォントを使用していますか?ブラウザー内のフォントと同じフォントをバッファーで使用できるかどうかを確認して、文字がそのフォントセットに含まれていることを確認してください。
dgtized

その価値については、DejaVu Sans MonoがEmacsでその文字をサポートしています。
ダン

@Dan:だから、少なくともMS Windows上で、ルシーダコンソールを行います-例えば、 "-outline-ルシーダコンソール-通常通常通常のモノ- 14 - - - -C- -iso8859-1"。
2014年

@dgtized、現在のフォントを見つける方法は?私はEmacsのフォント設定についてはあまり教育を受けていません。
qazwsx 2014年

1
元の投稿で引用したコードは、文字セットに応じて適切なフォントを使用するようになっていると思いました。つまり、仮名文字の場合は、「HanaMinPlus」を使用する必要があります。
qazwsx 2014年

回答:


3

特別なことをする必要はないと思います。Mac OS X、Linux、MS Windowsにはフォント置換テクノロジーがあります。したがって、フォントに文字が含まれていなくても、表示される可能性があります。ここで言及されているフォントの多くは、実際には中国語の文字セットを含んでいません。特に、MenloとDejaVuには漢字が含まれていません。(私のemacsはDejaVuを使用するように設定されており、中国語に関連する設定はありません。しかし、中国語は(単数を含めて)うまく表示されます。これはUbuntu Linux、Microsoft Windows 7、Mac OS Xでそうです。)

また、Macで使用しているemacsディストリビューションによっては、独自のフォントがの設定にバンドルされている可能性がありますsite-start.el

私は以下をお勧めします、順番に試してください、うまくいかない場合は次の項目を試してください:

  • emacsをで開始し--no-init-fileます。
  • emacsをで開始し--no-site-fileます。
  • --no-site-fileandでemacsを起動します--no-init-file
  • emacsを--no-site-fileで開始し、initファイルに次の行のみを含めます。(set-language-environment "UTF-8")

これらのステップのいずれかが機能する場合は、問題を絞り込んでいます。

文字が正確に表示されない理由を追跡するのは困難です。オペレーティングシステムが異なれば、フォント置換テクノロジーも異なり、すべての文字が100%機能するわけではありません。たとえば、Unicode 6の絵文字を表示するためにUnicodeフォントシンボルがインストールされていますが、具体的に設定するまで、多くは表示されません

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

上記は後に続きます:

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

ありがとう。見つけたものをアップデートとして元の投稿に追加します。
qazwsx 2014年

2

それを白い四角形(黒い中空の四角形)として表示している場合は、表示に使用されている現在の面のフォントがその文字をサポートしていないことを意味します。

その文字を確実にサポートする別のフォントを試してください。

このページでは、フォントを検査して変更するさまざまな方法について説明します。それらのいくつかは、それを行う前に、フォントの変更の効果を視覚的に検査することを可能にします。例えば、利用可能なフォントまたはそれらのサブセット間で循環します。

[しかし、使用しているEmacsのバージョンは何も言わない。Emacs 22以前を使用している場合、EmacsはUnicodeをサポートしていません。(それはキャラクターを表示できないことを意味するものではありませんが、状況が異なります。)]

フォントセットに関するこのEmacsWikiページが少し役立つかもしれません。


1

@Drewの回答のリンクにあるように、フォントを循環して必要なフォントを取得する方法はいくつかあります。私はDejaVu Sans Monoを使用しており、単文字を表示できることを確認できますが、Macでのアナログフォントが何であるかはわかりません。そのフォント(または@Drewのコメントの1つであるLucida Consoleなどの代わりに使用できる別のフォント)がある場合、以下を評価して現在のフレームのフォント(フォントサイズ15)を設定できます。

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

これで問題が解決した場合default-frame-alistは、initファイルの次の行にを追加することで、Emacsにデフォルトでそのフォントを使用するように指示できます。

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

ありがとう。しかし、既存のフォント設定コードを再実行せずに適応させる方法はありますか?オリジナルの何が問題になっていますか?
qazwsx 2014年

1
一度に1ステップずつ実行します。ダンが最初に提案したことを試して、それがあなたのために機能するかどうかを確認してください。機能する場合は、DejaVuなどを使用してフォントセットコードを試し、機能するかどうかを確認します。ある場合は、最初に必要なフォントを試してください。ある時点でうまくいかない場合は、その方法で問題が何であるかについて詳しく知ることができます。たとえば、問題は特定のフォントである可能性があり、必ずしもコードのアプローチではありません。
ドリュー

1
私の元の投稿のUpdate2を考えると、あなたのポイントは多かれ少なかれ重要です。
qazwsx 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.