Tạo bảng với các tiêu đề từ khối mã


9

Tôi muốn tạo các bảng có tiêu đề từ các khối mã. Một cái gì đó như thế này:

#+BEGIN_SRC emacs-lisp :results value table :table-header | First | Second |
  (identity '((a b) (c d)))
#+END_SRC

#+RESULTS:
| First | Second |
|-------+--------|
| a     | b      |
| c     | d      |

Thật không may, một cái gì đó như :table-header | First | Second |không tồn tại. Hay đúng hơn là tôi đang hy vọng rằng tôi đang xem xét một cái gì đó. (Ở đây tôi đang sử dụng (identity ...)như một trình giữ chỗ cho mã thực sự tính toán một giá trị.)

Cách giải quyết này không hoàn toàn làm điều đó cho tôi:

#+BEGIN_SRC emacs-lisp :results value table
  (cons (list "First" "Second")
        (identity '((a b) (c d))))
#+END_SRC

#+RESULTS:
| First | Second |
| a     | b      |
| c     | d      |

Tôi phải sửa đổi nội dung của khối mã và tiêu đề kết quả không thực sự là một hàng tiêu đề, một hàng giống như bất kỳ hàng nào khác.

Liên quan đến điều này (nhưng không giống nhau 100%, ở trên tôi muốn tránh phải đặt các hướng dẫn thiết lập bảng bên trong khối mã, bên dưới là bắt buộc), có yếu tố đặc biệt nào gây ra việc chèn dấu phân cách không? Cái gì đó như:

#+BEGIN_SRC emacs-lisp :results value table
  (nconc (identity '((a b) (c d)))  ; calculated value A
         (list 'linebreak)          ; explicitly inserted linebreak
         (identity '((A B) (C D)))) ; calculated value B
#+END_SRC

#+RESULTS:
| a | b |
| c | d |
|---+---|
| A | B |
| B | D |

Câu trả lời:


9

Chỉ cần sử dụng hlinethay vì linebreak. Các công việc sau đây:

* test
#+BEGIN_SRC emacs-lisp :results value table
  '(("First" "Second")
    hline
    (a b) (c d))
#+END_SRC

#+RESULTS:
| First | Second |
|-------+--------|
| a     | b      |
| c     | d      |

Sau khi chơi với :colnamesnhư được đề xuất trong câu trả lời khác, có vẻ như tôi sẽ phải mở yêu cầu tính năng #+BEGIN_SRC ... :colnames yescũng như :colnames "| First | Second |". Cho đến lúc đó tôi sẽ đi với phương pháp này.
tarsius

Chỉ cần một lưu ý trong trường hợp này bất cứ ai tìm thấy một bổ sung hữu ích: Nếu bạn không sử dụng quoted giá trị cho tất cả mọi thứ (ví dụ có thể bạn đang sử dụng một :vartiêu đề và a, b, c, vv được thực sự có nguồn gốc biến mà bạn sử dụng listtrên), chỉ cần trích dẫn 'hlinebiểu tượng chính nó.
lindes

3

Sau khi thêm hàng tiêu đề:

  1. Gán #+NAME:cho khối mã.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Thêm #+CALL:câu lệnh với :colnames yestiêu đề

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Chạy #+CALL:câu lệnh bằng cách sử dụng C-c C-c.

    #+RESULTS:
    | First | Second |
    |-------+--------|
    | a     | b      |
    | c     | d      |
    

Hy vọng rằng đã giúp!


Mã được kiểm tra bằng cách sử dụng

GNU Emacs 24.5.1 (x86_64-unknown-cygwin, GTK + Phiên bản 3.14.13)
phiên bản org: 8.3.2


Cảm ơn. Để tránh có hai bảng tôi tiền tố cả khối mã và cuộc gọi với #+NAME: same-name. Vì tôi vẫn phải sử dụng hàng tiêu đề khi sử dụng phương pháp này, tôi sẽ đi với giải pháp trong câu trả lời khác.
tarsius

@tarsius Cảm ơn đã cập nhật! Cảm ơn BTW đã hỏi câu hỏi này! Tôi biết một số cách khác nhau để thêm tiêu đề bảng mà bạn có thể thấy hữu ích. Tôi sẽ xem qua ghi chú của tôi một bài trả lời khác.
Melioratus
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.