Richten Sie die Spalten in der Org-Modustabelle an japanischen Schriftarten aus

12

Wie kann ich Japanisch und Englisch in derselben Tabelle im Organisationsmodus mischen (die Schriften mit fester Breite verwendet)? Etwas wie:

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

wird nicht ausgerichtet. Emacs zählt die japanischen Zeichen einfach als eins, obwohl sie eher 10% größer sind.

Könnte die Breite einer Spalte in Pixel eingestellt werden? Ich weiß, dass <10> die Breite festlegen würde, aber das hilft nicht, da es sich um Buchstaben mit fester Breite handelt.

Das Problem ist im Grunde, wie Emacs Spalten ausrichtet (unter Verwendung der Schriftbreite).

Quora Feans
quelle
Haben Sie versucht, die Tabellen auszurichten, C-c C-cwährend Sie sich in einer Zelle befinden? Ich habe gerade Ihr Beispiel in einen Org-Modus-Puffer eingefügt, getroffen C-c C-cund alles gut ausgerichtet.
Elethan
Dies ist wahrscheinlich etwas, das dem Organisationsmodus hinzugefügt werden muss. Möglicherweise können Sie dies mithilfe der :align-toAnzeigeeigenschaft erreichen, die unter gnu.org/software/emacs/manual/html_node/elisp/… beschrieben ist .
Legoscia
@elethan: Ja, einige Beispiele funktionieren mit einer bestimmten Kombination aus westlichen Schriftarten, Schriftgröße und japanischem Text. Emacs versucht, Beispiele wie oben auszurichten, und manchmal wird es richtig. Dies ist jedoch nur eine Frage des Glücks. In der Regel ist Emacs dafür blind.
Quora Feans
Benötigen Sie dafür keine monospaced Schriftart? In diesem Fall sollte stackoverflow.com/q/3758139/4050592 helfen, vorausgesetzt, Sie haben eine japanische Schriftart mit einem Leerzeichen , die Sie verwenden können.
Andrew Swann

Antworten:

5

Dies hängt von den verwendeten Schriftarten ab. Und ich glaube nicht, dass Elisp die Fähigkeit zur Ausrichtung auf Pixelebene besitzt.

Org Stringbreite berechnen mit string-widthstatt length. string-widthGibt 1 für ASCII- und CJK-Zeichen halber Breite oder 2 für Zeichen voller Breite zurück. Bewerten Sie den folgenden Code, um zu zeigen, dass:

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

Obwohl der Org-Modus die richtige Antwort von der Eigenschaft sting erhalten und Zeichenfolgen mit Pads versehen hat, ist es nun die Aufgabe der Emacs-Anzeige-Engine, die Position festzulegen, an der diese Bits auf dem Bildschirm angezeigt werden.

Die Emacs-Anzeige-Engine ruft Schriftinformationen vom zugrunde liegenden Betriebssystem ab. Um das komplexe Problem zu vereinfachen, nehmen wir an, dass bei Ihrer Konfiguration mdie Breite 5 Pixel und "は" 10 Pixel beträgt. In diesem Fall werden sie perfekt ausgerichtet, da die Annahme des Org-Modus ("は" das Doppelte der Breite von " m ") stimmt mit den tatsächlichen Pixeln auf Ihrem Bildschirm überein.

Wenn Ihre Schriftartenkonfiguration stattdessen 7 Pixel für "m" und 10 Pixel für "は" enthält, stimmen die Ergebnisse nicht überein. Und es gibt weder den Org-Modus noch die Display-Engine. Sie haben gemäß Ihrer Konfiguration das getan, was sie gesagt haben.

Yasushi Shoji
quelle