Căn chỉnh các cột dọc của số trên dấu thập phân


9

Tôi đã viết bài này trong Emacs. Để làm cho các bảng trông đẹp mắt, tôi quyết định điều chỉnh khoảng cách sao cho số thập phân xếp thành hàng gọn gàng. Định dạng ban đầu từ cơ sở dữ liệu trông như thế này:

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         

Điều đó khá gần, nhưng tôi muốn các cột hợp lý và tất cả các chữ số được xếp thành hàng. Cột thứ tư sẽ trông như:

 3.6
11.1
 4

Tôi đã chơi xung quanh với các lệnh căn chỉnh và không thể tìm ra cách tự động căn chỉnh bảng trên dấu thập phân (tùy chọn). Vì một số lý do, các hướng dẫn này không phù hợp với bất cứ điều gì cả:

Các hình cũng có thể được xếp thành hàng liên quan đến dấu thập phân, sử dụng M-- M-x align.

Câu trả lời:


8

Trước tiên, bạn cần chắc chắn rằng bộ đệm ở chế độ Văn bản :

M-x text-mode

Khi ở chế độ văn bản, C-- M-x align(gọi text-dollar-figurequy tắc căn chỉnh) sẽ căn chỉnh thập phân đầu tiên theo chiều dọc. Nhưng nó không thể căn chỉnh cột thập phân thứ hai. Thêm vào đó, nó không thể căn chỉnh các số không có dấu thập phân rõ ràng (chẳng hạn như điểm trung bình 4 của wolfram-mathicala). Để khắc phục điều đó, bạn sẽ muốn điều chỉnh giá trị của quy tắc trong 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)))

Đó là một vài điều:

  • Hiện tại regrec cho phép một khoảng thời gian theo dõi tùy chọn.
  • Bằng cách bật lặp lại, mỗi trường hợp của một số được căn chỉnh.
  • Tôi đã thêm 2 khoảng trắng thay vì chỉ một cho dễ đọc.

Kết quả:

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         

Một phương thức tương đương nhiều hơn hoặc ít hơn là xác định hàm gọi 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))

Trong trường hợp này, tôi đặt groupstham số thành số âm để bật chứng minh đúng và spacingvề 0 để giữ khoảng cách ban đầu càng nhiều càng tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.