Alinear columnas en la tabla del modo Org con fuentes japonesas

12

¿Cómo puedo mezclar japonés e inglés en la misma tabla de modo de organización (que usa fuentes de ancho fijo)? Algo como:

El | mmmmmm | El |
El | は ど う デ シ ウ | El |
El | ハ ー フ | ハ ー フ |

no se alineará Emacs simplemente cuenta los caracteres japoneses como uno solo, cuando de hecho son más como 10% más grandes.

¿Se puede establecer el ancho de una columna en píxeles? Sé que <10> establecería el ancho, pero eso no ayuda, ya que cuenta en términos de letras de ancho fijo.

El problema es básicamente cómo emacs alinea las columnas (usando el ancho de fuente).

Quora Feans
fuente
¿Has intentado alinear las tablas C-c C-cmientras estás en una celda? Acabo de pegar su ejemplo en un búfer de modo org, hit C-c C-cy todo se alineó muy bien.
Elethan
Esto es probablemente algo que debe agregarse al modo org. Es posible lograr esto usando la :align-topropiedad de visualización, descrita en gnu.org/software/emacs/manual/html_node/elisp/… .
legoscia
@elethan: sí, algunos ejemplos funcionan con una cierta combinación de fuentes occidentales, tamaño de la cara y texto en japonés. Emacs intenta alinear los ejemplos anteriores y, a veces, lo hace bien. Sin embargo, esto es solo una cuestión de suerte. En general, emacs es ciego para esto.
Quora Feans
¿No necesitas una fuente monoespaciada para esto? En ese caso, stackoverflow.com/q/3758139/4050592 debería ayudar siempre que tenga una fuente japonesa monoespaciada que pueda usar.
Andrew Swann

Respuestas:

5

Esto depende de las fuentes que esté utilizando. Y no creo que Elisp tenga la capacidad de alineación de nivel de píxeles.

Org calcular el ancho de cadena con en string-widthlugar de length. string-widthdevuelve 1 para caracteres ASCII y CJK de medio ancho o 2 para caracteres de ancho completo. Evaluar el siguiente código le mostrará que:

(string-width "m")
1
(string-width "ハ")
1
(string-width "は")
2

Ahora, a pesar de que el modo Org obtuvo la respuesta correcta de la propiedad de picadura y agregó almohadillas alrededor de las cadenas, el trabajo del motor de visualización de Emacs es ubicar dónde van esos bits en la pantalla.

El motor de visualización Emacs obtiene información de la fuente del sistema operativo subyacente. Para simplificar el problema complejo, digamos que, con su configuración, mel ancho es de 5 píxeles y "は" es 10. En este caso, estarán perfectamente alineados porque el supuesto del modo Org ("は" toma el doble del ancho de " m ") coincide con los píxeles reales en su pantalla.

En cambio, si la configuración de sus fuentes tiene 7 píxeles para "m" y 10 píxeles para "は", las cosas no coincidirán. Y no hay nada que el modo Org ni el motor de pantalla puedan hacer. Hicieron lo que les dijeron, según su configuración, que hicieran.

Yasushi Shoji
fuente