単 no aparece en Emacs, ¿cómo solucionarlo?


7

Estoy editando un archivo de texto que contiene caracteres kanji japoneses. 単 no aparece en Emacs, ¿cómo solucionarlo? Aparece como una especie de espacio en blanco.

Actualización :

Estoy usando GNU Emacs 24.3 (9) para Mac.

Después de examinar mi .emacs, en realidad copié de la configuración de otra persona y tiene

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

pero no entiendo muy bien lo que hace. Aparentemente no funciona para algunos personajes Kanji.

Actualización 2

He confirmado que la fuente HanaMinPluspuede mostrar ese carácter correctamente evaluando (set-frame-font "HanMinPlus" nil t)en mi mini-buffer y observando que aparece correctamente en el scratch buffer. Pero me pregunto cómo ajustar / corregir el código anterior para permitir que detecte y configure la fuente automáticamente. No entiendo cómo funcionan los conjuntos de fuentes en Emacs. Pero

describe-fontset 

da

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

no myfontset. Y describe-fontda

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

Actualización 3

Experimento 1

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

y luego abra un archivo de texto que contenga

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

Veo que todos los personajes se muestran correctamente. Y describe-fontcon la selección predeterminada muestra

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

y describe-fontsetmuestra

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

Experimento 2

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

y luego abra el mismo archivo de prueba. Veo que todos los personajes se muestran correctamente. Y describe-fontcon la selección predeterminada muestra

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 qué no es el tamaño de fuente 16?

y describe-fontsetmuestra

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

2
¿Qué fuente estás usando actualmente? Vea si puede usar la misma fuente en el búfer que la del navegador para asegurarse de que el carácter esté incluido en ese conjunto de fuentes.
Dgtized

Por lo que vale, DejaVu Sans Mono admite ese personaje en Emacs.
Dan

@Dan: Lucida Console, al menos en MS Windows, por ejemplo, "-outline-Lucida Console-normal-normal-normal-mono-14- - - -c- -iso8859-1".
Dibujó

@dgtized, ¿cómo averiguar la fuente actual? No estoy muy educado en la configuración de fuentes para Emacs.
qazwsx

1
Pensé que el código que cité en la publicación original está destinado a usar la fuente apropiada dependiendo de los conjuntos de caracteres, es decir, si se trata de caracteres kana japoneses, debería usar "HanaMinPlus".
qazwsx

Respuestas:


3

No creo que tengas que hacer nada especial. Recuerde, hay tecnología de sustitución de fuentes en Mac OS X, Linux, MS Windows. Entonces, incluso si la fuente no contiene el carácter, probablemente se mostrará. Muchas de las fuentes mencionadas aquí en realidad no contienen conjuntos de caracteres chinos. Específicamente, Menlo y DejaVu no contienen caracteres chinos. (mi emacs está configurado para usar DejaVu, y sin ninguna configuración relacionada con el chino. Pero el chino se ve bien (incluido 単). Esto ha sido así en Ubuntu Linux, Microsoft Windows 7, Mac OS X.)

Además, dependiendo de la distribución de emacs que esté utilizando en la Mac, es probable que hayan incluido su propia fuente con la configuración site-start.el.

Recomendaría lo siguiente, intente en orden, si no funciona, pruebe el siguiente elemento:

  • Inicie emacs con --no-init-file.
  • Inicie emacs con --no-site-file.
  • Inicie emacs con --no-site-filey--no-init-file
  • Inicie emacs con --no-site-file, solo con esta línea en su archivo de inicio:(set-language-environment "UTF-8")

Si uno de estos pasos funciona, entonces ha reducido el problema.

Es difícil rastrear por qué no se muestra exactamente un personaje. Los diferentes sistemas operativos utilizan diferentes tecnologías de sustitución de fuentes y no funcionan al 100% para todos los caracteres. por ejemplo, tengo instalado el símbolo de fuente Unicode para mostrar los emoticones de Unicode 6, pero muchos no se muestran, hasta que configuré específicamente

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

lo anterior viene después:

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

Gracias; Agregaré lo que encontré en la publicación original como una actualización.
qazwsx

2

Si lo ve como un rectángulo blanco (un rectángulo hueco negro), entonces probablemente significa que la fuente de la cara actual utilizada para mostrarlo no es compatible con ese carácter.

Pruebe con otra fuente, que está seguro de que admite ese carácter.

Esta página cubre varias formas de inspeccionar y cambiar las fuentes. Varios de ellos le permiten inspeccionar visualmente el efecto de cambiar las fuentes antes de hacerlo, por ejemplo, alternar entre las fuentes o subconjuntos disponibles.

[Pero no dices qué versión de Emacs estás usando. Si está utilizando Emacs 22 o anterior, entonces Emacs no tiene soporte Unicode. (Eso no implica que no pueda mostrar el personaje, pero hace las cosas diferentes).]

Tal vez esta página de EmacsWiki en conjuntos de fuentes te ayudará un poco.


1

Según el enlace en la respuesta de @ Drew, hay varias formas de recorrer las fuentes para obtener la que necesita. Uso DejaVu Sans Mono y puedo confirmar que puede mostrar el carácter 単, aunque no estoy seguro de cuál es la fuente analógica en una Mac. Si tiene esa fuente (u otra que pueda usar en su lugar, como Lucida Console según uno de los comentarios de @ Drew), puede evaluar lo siguiente para establecer la fuente del marco actual (con un tamaño de fuente de 15):

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

Si eso funciona para usted, puede decirle a Emacs que use esa fuente de forma predeterminada agregando a default-frame-alistla siguiente línea en su archivo de inicio:

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

Gracias. Pero, ¿hay alguna manera de adaptar el código de configuración de fuente existente sin volver a hacerlo? ¿Qué hay de malo con mi original?
qazwsx

1
Da un paso a la vez. Pruebe lo que Dan sugiere primero, para ver si funciona para usted. Si lo hace, pruebe su código de conjunto de fuentes usando DejaVu, etc., para ver si eso funciona. Si es así, pruebe las fuentes que quería en primer lugar. Si las cosas no funcionan en algún momento, sabrá más sobre cuál es el problema de esa manera. Por ejemplo, el problema podría ser la fuente en particular, y no necesariamente su enfoque de código.
Dibujó

1
Su punto es más o menos discutible dada la Actualización2 en mi publicación original.
qazwsx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.