数値の垂直列を小数点に揃える


9

この投稿はEmacsで書きました。テーブルの見栄えをよくするために、小数がきれいに並ぶように間隔を調整することにしました。データベースの元の形式は次のようになります

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         

それはかなり近いですが、私は列を右揃えにし、すべての桁が一列に並ぶようにします。4番目の列は次のようになります。

 3.6
11.1
 4

私はと遊ん整列コマンドと、自動的に(オプション)小数点にテーブルを整列する方法を見つけることができませんでした。何らかの理由で、これらの命令は何も整列させることができません:

を使用して、小数点を基準にして数字を並べることもできM-- M-x alignます。

回答:


8

まず、バッファがテキストモードであることを確認する必要があります

M-x text-mode

テキストモードになるとC-- M-x aligntext-dollar-figure配置規則を呼び出す)、最初の10進数が垂直に配置されます。しかし、2番目の10進数列の位置合わせは失敗します。さらに、明示的な小数点のない数値(wolfram-mathematicaの平均スコア4など)を揃えることができません。これを修正するには、次のルールの値を調整しますalign-rules-list

(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)))

それはいくつかのことを行います:

  • 正規表現は、オプションの後続期間を許可します。
  • 繰り返しをオンにすると、数値の各インスタンスが整列されます。
  • 読みやすくするために、1つではなく2つのスペースを追加しました。

結果:

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         

多かれ少なかれ同等の方法は、以下を呼び出す関数を定義することです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))

この場合、groupsパラメーターを負の数に設定して右揃えをオンにしspacing、元の間隔をできるだけ維持するために0 に設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.