Allineare le colonne nella tabella delle modalità Org con i caratteri giapponesi


12

Come posso mescolare giapponese e inglese nella stessa tabella in modalità org (che utilizza caratteri a larghezza fissa)? Qualcosa di simile a:

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

non si allinea. Emacs conta semplicemente i personaggi giapponesi come uno, quando in realtà sono più simili al 10% in più.

La larghezza di una colonna può essere impostata in pixel? So che <10> imposta la larghezza, ma ciò non aiuta, poiché conta in termini di lettere a larghezza fissa.

Il problema è sostanzialmente come emacs allinea le colonne (usando la larghezza del carattere).


Hai provato ad allineare le tabelle C-c C-cmentre sei in una cella? Ho appena incollato il tuo esempio in un buffer in modalità org, hit C-c C-ce tutto allineato bene.
elethan,

Questo è probabilmente qualcosa che deve essere aggiunto alla modalità org. Potrebbe essere possibile ottenerlo utilizzando la :align-toproprietà display, descritta in gnu.org/software/emacs/manual/html_node/elisp/… .
Legoscia,

@elethan: sì, alcuni esempi funzionano con una certa combinazione di caratteri occidentali, dimensioni del viso e del testo giapponese. Emacs cerca di allineare gli esempi come sopra e a volte fa bene. Tuttavia, questa è solo una questione di fortuna. In generale, emacs è cieco per questo.
Quora Feans

Non hai bisogno di un carattere a spaziatura fissa per questo? Nel qual caso stackoverflow.com/q/3758139/4050592 dovrebbe aiutarti a condizione che tu abbia un carattere giapponese a spaziatura fissa che puoi usare.
Andrew Swann,

Risposte:


5

Questo dipende dai caratteri che stai usando. E non credo che Elisp abbia la capacità di allineamento a livello di pixel.

Org calcola la larghezza della stringa con string-widthinvece di length. string-widthrestituisce 1 per i caratteri ASCII e CJK a mezza larghezza o 2 per i caratteri a larghezza intera. Valuta il seguente codice ti mostrerà che:

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

Ora, anche se la modalità Org ha ottenuto la risposta giusta dalla proprietà sting e ha aggiunto pad attorno alle stringhe, è compito del motore di visualizzazione Emacs posizionare dove quei bit vanno sullo schermo.

Il motore di visualizzazione di Emacs ottiene le informazioni sui caratteri dal sistema operativo sottostante. Per rendere semplice il problema complesso, supponiamo che, con la tua configurazione, mla larghezza sia di 5 pixel e "は" sia 10. In questo caso saranno perfettamente allineati perché l'ipotesi della modalità Org ("は" richiede il doppio della larghezza di " m ") corrisponde ai pixel effettivi sullo schermo.

Invece, se la configurazione dei tuoi caratteri ha 7 pixel per "m" e 10 pixel per "は", le cose non combaciano. E non c'è nulla che la modalità Org né il motore di visualizzazione possano fare. Hanno fatto quello che hanno detto, secondo la tua configurazione, di fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.