Alinhar colunas na tabela do modo Org com fontes japonesas

12

Como posso misturar japonês e inglês na mesma tabela de modo organizacional (que usa fontes de largura fixa)? Algo como:

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

não vai alinhar. O Emacs simplesmente conta os caracteres japoneses como um, quando na verdade eles são 10% maiores.

A largura de uma coluna pode ser definida em pixels? Eu sei que <10> definiria a largura, mas isso não ajuda, pois conta em termos de letras de largura fixa.

O problema é basicamente como o emacs alinha as colunas (usando a largura da fonte).

Quora Feans
fonte
Você já tentou alinhar as tabelas C-c C-cenquanto está em uma célula? Acabei de colar seu exemplo em um buffer de modo organizacional, sucesso C-c C-ce tudo alinhado de maneira adequada.
Elethan
Provavelmente, isso é algo que precisa ser adicionado ao modo organizacional. Pode ser possível fazer isso usando a :align-topropriedade display, descrita em gnu.org/software/emacs/manual/html_node/elisp/… .
legoscia
@elethan: sim, alguns exemplos funcionam com uma certa combinação de fontes ocidentais, tamanho da face e algum texto em japonês. O Emacs tenta alinhar os exemplos como acima e, às vezes, acerta. No entanto, isso é apenas uma questão de sorte. Em geral, o emacs é cego para isso.
Quora Feans
Você não precisa de uma fonte monoespaçada para isso? Nesse caso, stackoverflow.com/q/3758139/4050592 deve ajudar, desde que você tenha uma fonte japonesa monoespaçada que possa ser usada.
Andrew Swann

Respostas:

5

Isso depende das fontes que você está usando. E não acho que o Elisp tenha capacidade de alinhamento no nível de pixel.

A organização calcula a largura da sequência com, em string-widthvez de length. string-widthretorna 1 para caracteres ASCII e CJK de meia largura ou 2 para caracteres de largura total. Avalie o seguinte código para mostrar que:

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

Agora, mesmo que o modo Org tenha a resposta certa da propriedade sting e tenha adicionado blocos ao redor de strings, é o trabalho do mecanismo de exibição do Emacs colocar onde esses bits aparecem na tela.

O mecanismo de exibição do Emacs obtém informações de fonte do sistema operacional subjacente. Para simplificar o problema complexo, digamos que, com a sua configuração, ma largura de 5 pixels e "は" seja 10. Nesse caso, eles estarão perfeitamente alinhados porque a suposição do modo Org ("は" ocupa o dobro da largura de " m ") corresponde aos pixels reais na tela.

Em vez disso, se a configuração das fontes tiver 7 pixels para "m" e 10 pixels para "は", as coisas não corresponderão. E não há nada no modo Org nem o mecanismo de exibição pode fazer. Eles fizeram o que disseram, pela sua configuração, para fazer.

Yasushi Shoji
fonte