Aligner les colonnes du tableau du mode Org avec les polices japonaises

12

Comment puis-je mélanger le japonais et l'anglais dans la même table en mode org (qui utilise des polices à largeur fixe)? Quelque chose comme:

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

ne s'alignera pas. Emacs compte simplement les caractères japonais comme un, alors qu'en fait ils sont plus gros comme 10%.

La largeur d'une colonne peut-elle être définie en pixels? Je sais que <10> définirait la largeur, mais cela n'aide pas, car cela compte en termes de lettres à largeur fixe.

Le problème est essentiellement comment emacs aligne les colonnes (en utilisant la largeur de police).

Quora Feans
la source
Avez-vous essayé d'aligner les tableaux avec C-c C-clorsque vous êtes dans une cellule? Je viens de coller votre exemple dans un tampon en mode org, de frapper C-c C-cet tout est bien aligné.
elethan
C'est probablement quelque chose qui doit être ajouté au mode org. Il pourrait être possible d'y parvenir en utilisant la :align-topropriété display, décrite dans gnu.org/software/emacs/manual/html_node/elisp/… .
legoscia
@elethan: oui, certains exemples fonctionnent avec une certaine combinaison de polices occidentales, de taille de visage et de texte japonais. Emacs essaie d'aligner les exemples comme ci-dessus et parfois il réussit. Cependant, ce n'est qu'une question de chance. En général, emacs est aveugle pour cela.
Quora Feans
Vous n'avez pas besoin d'une police à espacement fixe pour cela? Dans ce cas, stackoverflow.com/q/3758139/4050592 devrait vous aider à condition que vous disposiez d'une police japonaise à espacement fixe que vous pouvez utiliser.
Andrew Swann

Réponses:

5

Cela dépend des polices que vous utilisez. Et je ne pense pas qu'Elisp ait une capacité d'alignement au niveau des pixels.

Org calcule la largeur de la chaîne avec string-widthau lieu de length. string-widthrenvoie 1 pour les caractères ASCII et CJK demi-largeur ou 2 pour les caractères pleine largeur. Évaluer le code suivant vous montrera que:

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

Maintenant, même si le mode Org a obtenu la bonne réponse de la propriété sting et a ajouté des pads autour des chaînes, c'est le travail du moteur d'affichage Emacs de placer où ces bits vont à l'écran.

Le moteur d'affichage Emacs obtient les informations de police du système d'exploitation sous-jacent. Pour simplifier le problème complexe, disons que, avec votre configuration, mla largeur de 5 pixels et "は" est 10. Dans ce cas, ils seront parfaitement alignés car l'hypothèse du mode Org ("は" prend deux fois la largeur de " m ") correspond aux pixels réels de votre écran.

Au lieu de cela, si votre configuration de polices a 7 pixels pour "m" et 10 pixels pour "は", les choses ne correspondent pas. Et il n'y a rien en mode Org ni le moteur d'affichage ne peuvent le faire. Ils ont fait ce qu'ils avaient dit, selon votre configuration, de faire.

Yasushi Shoji
la source