Wyrównaj kolumny w tabeli trybu Org z czcionkami japońskimi

12

Jak mieszać japoński i angielski w tej samej tabeli w trybie organizacji (która używa czcionek o stałej szerokości)? Coś jak:

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

nie wyrówna się. Emacs liczy po prostu japońskie postacie jako jedne, a tak naprawdę są one o około 10% większe.

Czy szerokość kolumny może być ustawiona w pikselach? Wiem, że <10> ustawiłoby szerokość, ale to nie pomaga, ponieważ liczy się to jako litery o stałej szerokości.

Problem polega w zasadzie na tym, jak emacs wyrównuje kolumny (używając szerokości czcionki).

Quora Feans
źródło
Czy próbowałeś wyrównać tabele, C-c C-cgdy jesteś w komórce? Właśnie wkleiłem twój przykład do bufora trybu org, uderzyłem C-c C-ci wszystko ładnie się dopasowało.
elethan
Jest to prawdopodobnie coś, co należy dodać do trybu org. Można to osiągnąć za pomocą :align-towłaściwości display opisanej w gnu.org/software/emacs/manual/html_node/elisp/… .
legoscia
@elethan: tak, niektóre przykłady działają z pewną kombinacją zachodnich czcionek, rozmiaru twarzy i niektórych japońskich tekstów. Emacs próbuje wyrównać przykłady jak wyżej i czasami robi to dobrze. To jednak tylko kwestia szczęścia. Ogólnie rzecz biorąc, emacs jest na to ślepy.
Quora Feans
Czy nie potrzebujesz do tego czcionki o stałej szerokości? W takim przypadku stackoverflow.com/q/3758139/4050592 powinien pomóc, pod warunkiem, że masz czcionkę japońską o stałej szerokości, której możesz użyć.
Andrew Swann

Odpowiedzi:

5

Zależy to od używanych czcionek. I nie sądzę, że Elisp ma możliwość wyrównywania poziomu pikseli.

Org obliczy szerokość łańcucha za pomocą string-widthzamiast length. string-widthzwraca 1 dla znaków ASCII i znaków CJK o połowie szerokości lub 2 dla znaków o pełnej szerokości. Oceń następujący kod pokaże Ci, że:

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

Teraz, mimo że tryb Org uzyskał prawidłową odpowiedź z właściwości żądła i dodał pady wokół ciągów, zadaniem silnika wyświetlającego Emacsa jest miejsce, w którym te fragmenty trafiają na ekran.

Silnik wyświetlania Emacsa pobiera informacje o czcionkach z podstawowego systemu operacyjnego. Aby uprościć złożony problem, powiedzmy, że przy konfiguracji mszerokość wynosi 5 pikseli, a „は” wynosi 10. W tym przypadku zostaną one idealnie wyrównane, ponieważ założenie trybu Org („は” zajmuje dwa razy więcej niż „ m ”) odpowiada rzeczywistym pikselom na ekranie.

Zamiast tego, jeśli konfiguracja czcionek ma 7 pikseli dla „m” i 10 pikseli dla „は”, rzeczy się nie zgadzają. I nie ma nic w trybie Org ani silnika wyświetlania. Zrobili to, co według twojej konfiguracji zrobili.

Yasushi Shoji
źródło