Ondalık basamaktaki sayıların dikey sütunlarını hizalama


9

Yazdığım bu yazı Emacs. Tabloların güzel görünmesini sağlamak için, ondalık sayıların düzgün bir şekilde hizalanması için aralığı ayarlamaya karar verdim. Veritabanındaki orijinal biçim şöyle görünüyordu:

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         

Bu oldukça yakın, ama sütunların doğrulanmasını istiyorum ve tüm rakamlar dizilmiş. Dördüncü sütun şöyle görünmelidir:

 3.6
11.1
 4

Align komutlarıyla oynadım ve tabloyu (isteğe bağlı) ondalık noktasında otomatik olarak hizalamanın bir yolunu bulamadım. Bazı nedenlerden dolayı, bu talimatlar hiçbir şeyi hizalamaz:

Şekiller ayrıca, ondalık noktaya göre dizilebilir M-- M-x align.

Yanıtlar:


8

İlk olarak, ara belleğin Metin modunda olduğundan emin olmanız gerekir :

M-x text-mode

Metin modundayken, C-- M-x align( text-dollar-figurehizalama kuralını çağırır ) ilk ondalığı dikey olarak hizalar. Ancak ikinci ondalık sütunu hizalayamaz. Ayrıca, açık ondalık noktası olmayan sayıları hizalayamaz (wolfram-mathematica'nın ortalama 4 puanı gibi). Bunu düzeltmek için, kuralın değerini aşağıdaki gibi ayarlamak istersiniz 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)))

Bu birkaç şey yapar:

  • Normal ifade artık isteğe bağlı bir izleyen döneme izin vermektedir.
  • Tekrarı açtığınızda, bir sayının her bir örneği hizalanır.
  • Okunabilirlik için sadece bir tane yerine 2 boşluk ekledim.

Sonuç:

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         

Aşağı yukarı eşdeğer bir yöntem çağıran bir fonksiyon tanımlamaktır 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))

Bu durumda, groupsparametreyi sağ yaslamayı açmak için negatif bir sayıya spacingve orijinal aralığı olabildiğince korumak için 0'a ayarladım .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.