Richten Sie vertikale Zahlenspalten auf dem Dezimalpunkt aus

9

Ich habe diesen Beitrag in Emacs geschrieben. Damit die Tabellen schön aussehen, habe ich beschlossen, den Abstand so anzupassen, dass die Dezimalstellen ordentlich ausgerichtet sind. Das ursprüngliche Format aus der Datenbank sah folgendermaßen aus:

emacs                11505 227          3.6       3.3         1.9         68.9          93.5        68         
vi                   1087  289          11.1      6.9         2.9         71.7          96.2        9          
wolfram-mathematica  2993  360          4         2.2         1.9         66.7          92.5        51         

Das ist ziemlich nah, aber ich möchte, dass die Spalten richtig ausgerichtet und alle Ziffern in einer Reihe stehen. Die vierte Spalte sollte folgendermaßen aussehen:

 3.6
11.1
 4

Ich habe mit den Ausrichtungsbefehlen herumgespielt und konnte keine Möglichkeit finden, die Tabelle automatisch auf dem (optionalen) Dezimalpunkt auszurichten. Aus irgendeinem Grund können diese Anweisungen überhaupt nichts ausrichten:

Zahlen können auch in Bezug auf den Dezimalpunkt mit ausgerichtet werden M-- M-x align.

Jon Ericson
quelle

Antworten:

8

Zunächst müssen Sie sicherstellen, dass sich der Puffer im Textmodus befindet :

M-x text-mode

Im Textmodus C-- M-x align(der die text-dollar-figureAusrichtungsregel aufruft ) wird die erste Dezimalstelle vertikal ausgerichtet. Die zweite Dezimalspalte kann jedoch nicht ausgerichtet werden. Außerdem können Zahlen ohne expliziten Dezimalpunkt nicht ausgerichtet werden (z. B. die durchschnittliche Punktzahl von wolfram-mathematica von 4). Um dies zu beheben, müssen Sie den Wert der Regel in den align-rules-listfolgenden Abschnitten anpassen :

(text-dollar-figure
  (regexp . "\\$?\\(\\s-+[0-9]+\\)\\.?")
  (modes . align-text-modes)
  (repeat . t)
  (spacing . 2)
  (justify . t)
  (run-if lambda nil
      (eq '- current-prefix-arg)))

Das macht ein paar Dinge:

  • Der reguläre Ausdruck ermöglicht jetzt eine optionale Nachlaufzeit.
  • Durch Aktivieren der Wiederholung wird jede Instanz einer Zahl ausgerichtet.
  • Ich habe aus Gründen der Lesbarkeit 2 Leerzeichen anstelle von nur einem hinzugefügt.

Das Ergebnis:

emacs                11505  227   3.6  3.3  1.9  68.9  93.5   68         
vi                    1087  289  11.1  6.9  2.9  71.7  96.2    9          
wolfram-mathematica   2993  360   4    2.2  1.9  66.7  92.5   51         

Eine mehr oder weniger äquivalente Methode besteht darin, eine Funktion zu definieren, die Folgendes aufruft align-regexp:

(defun align-decimal (start end)
    "Align a table of numbers on (optional) decimal points."
    (interactive "r")
    (align-regexp start end "\\(\\s-*\\)\\$?\\(\\s-+[0-9]+\\)\\.?"
                  -2 0 t))

In diesem Fall habe ich den groupsParameter auf eine negative Zahl gesetzt, um die rechte Ausrichtung spacingzu aktivieren, und auf 0, um den ursprünglichen Abstand so weit wie möglich beizubehalten.

Jon Ericson
quelle