単 não aparece no Emacs, como consertar?


7

Estou editando um arquivo de texto contendo caracteres kanji japoneses. 単 não aparece no Emacs, como consertar? Ele aparece como algum tipo de espaço em branco.

Atualização :

Estou usando o GNU Emacs 24.3 (9) para Mac.

Depois de examinar o meu .emacs, eu realmente copiei da configuração de outra pessoa e

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

mas não entendo direito o que faz. Aparentemente, isso não funciona para alguns caracteres kanji.

Atualização 2

Confirmei que a fonte HanaMinPluspode exibir esse caractere corretamente, avaliando (set-frame-font "HanMinPlus" nil t)no meu mini-buffer e observando aparecer corretamente no buffer de rascunho. Mas eu me pergunto como ajustar / corrigir o código acima para permitir que ele detecte e defina a fonte automaticamente. Eu não entendo como o fontset funciona no Emacs. Mas

describe-fontset 

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

não myfontset. E 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

Atualização 3

Experiência 1

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

e abra um arquivo de texto contendo

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

Eu vejo todos os caracteres aparecendo corretamente. E describe-fontcom a seleção padrão mostra

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

e describe-fontsetmostra

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

Experiência 2

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

e abra o mesmo arquivo de teste. Eu vejo todos os caracteres aparecendo corretamente. E describe-fontcom a seleção padrão mostra

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

Por que não tem tamanho de fonte 16 ?!

e describe-fontsetmostra

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

2
Qual fonte você está usando atualmente? Veja se você pode usar a mesma fonte no buffer que a do navegador para garantir que o caractere esteja incluído nesse conjunto de fontes.
dgtized

Pelo que vale, DejaVu Sans Mono suporta esse personagem no Emacs.
Dan

@ Dan: O mesmo acontece com o Lucida Console, pelo menos no MS Windows - por exemplo, "-outline-Lucida Console-normal-normal-normal-mono-14- - - -c- -iso8859-1".
Drew

@dgtized, como descobrir a fonte atual? Eu não sou muito educado em configuração de fontes para o Emacs.
qazwsx

11
Eu pensei que o código que citei na postagem original se destina a usar a fonte apropriada, dependendo dos conjuntos de caracteres, ou seja, se forem caracteres kana japoneses, ele deve usar "HanaMinPlus".
qazwsx

Respostas:


3

Eu não acho que você tenha que fazer algo especial. Lembre-se, há tecnologia de substituição de fonte no Mac OS X, Linux e MS Windows. Portanto, mesmo que a fonte não contenha o caractere, provavelmente será exibida. Muitas das fontes mencionadas aqui na verdade não contêm conjuntos de caracteres chineses. Especificamente, Menlo e DejaVu não contêm caracteres chineses. (o meu emacs está configurado para usar o DejaVu, e sem nenhuma configuração relacionada ao chinês. Mas o chinês mostra bem (incluindo including). Isso aconteceu no Ubuntu Linux, Microsoft Windows 7, Mac OS X.)

Além disso, dependendo da distribuição do emacs que você está usando no Mac, eles provavelmente agregaram sua própria fonte com as configurações site-start.el.

Eu recomendaria o seguinte, tente em ordem, se não funcionar, tente o próximo item:

  • Inicie o emacs com --no-init-file.
  • Inicie o emacs com --no-site-file.
  • Inicie o emacs com --no-site-filee--no-init-file
  • Inicie o emacs com --no-site-file, apenas esta linha no seu arquivo init:(set-language-environment "UTF-8")

Se uma dessas etapas funcionar, você reduziu o problema.

É difícil descobrir por que exatamente um personagem não é exibido. Diferentes sistemas operacionais usam tecnologia de substituição de fonte diferente e não funcionam 100% para todos os caracteres. por exemplo, tenho a simbola da fonte Unicode instalada para exibir os emoticons do Unicode 6, mas muitos não aparecem, até que eu defina especificamente

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

o acima vem depois:

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

Obrigado; Vou adicionar o que encontrei na postagem original como uma atualização.
Qazwsx 11/10

2

Se você o estiver vendo como um retângulo branco (um retângulo oco preto), provavelmente significa que a fonte da face atual usada para exibi-lo não suporta esse caractere.

Tente outra fonte, que com certeza suporta esse caractere.

Esta página aborda várias maneiras de inspecionar e alterar fontes. Vários deles permitem que você inspecione visualmente o efeito de alterar as fontes antes de fazê-lo, por exemplo, alternando entre as fontes ou subconjuntos disponíveis.

[Mas você não diz qual versão do Emacs está usando. Se você estiver usando o Emacs 22 ou anterior, o Emacs não tem suporte para Unicode. (Isso não implica que não possa mostrar o personagem, mas torna as coisas diferentes.)]

Talvez esta página do EmacsWiki em fontes o ajude um pouco.


1

De acordo com o link na resposta de @ Drew, existem várias maneiras de alternar entre as fontes para obter a que você precisa. Eu uso o DejaVu Sans Mono e posso confirmar que ele pode exibir o caractere,, embora não tenha certeza de qual é a fonte analógica em um Mac. Se você tiver essa fonte (ou outra que possa ser usada em seu lugar, como o Lucida Console, de acordo com um dos comentários de @ Drew), avalie o seguinte para definir a fonte do quadro atual (com tamanho de fonte 15):

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

Se isso funcionar para você, você pode dizer ao Emacs como padrão para essa fonte adicionando à default-frame-alistseguinte linha no seu arquivo init:

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

Obrigado. Mas existe uma maneira de adaptar o código de configuração de fonte existente sem refazê-lo? O que há de errado com o meu original?
qazwsx

11
Dê um passo de cada vez. Experimente o que Dan sugere primeiro, para ver se funciona para você. Se isso acontecer, tente o código do seu conjunto de fontes usando o DejaVu etc., para ver se isso funciona. Se isso acontecer, tente as fontes que você queria em primeiro lugar. Se as coisas não funcionarem em algum momento, você saberá mais sobre qual é o problema. Por exemplo, o problema pode ser a fonte específica e não necessariamente a sua abordagem de código.
Tirou

11
Seu ponto de vista é mais ou menos discutível, considerando o Update2 no meu post original.
Qazwsx
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.