Membuat tabel dengan header dari blok kode

9

Saya ingin membuat tabel yang memiliki header dari blok kode. Sesuatu seperti ini:

#+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      |

Sayangnya sesuatu seperti :table-header | First | Second |tidak ada. Atau lebih tepatnya saya berharap bahwa saya mengabaikan sesuatu. (Di sini saya menggunakan (identity ...)sebagai pengganti untuk kode yang sebenarnya menghitung nilai.)

Solusi ini tidak cukup untuk saya:

#+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      |

Saya harus memodifikasi konten blok kode dan header yang dihasilkan sebenarnya bukan baris header, itu baris seperti yang lain.

Terkait dengan ini (tetapi tidak 100% sama, di atas saya ingin menghindari harus meletakkan instruksi pengaturan tabel di dalam blok kode, di bawah yang diperlukan), apakah ada elemen khusus yang menyebabkan penyisipan pemisah? Sesuatu seperti:

#+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 |
tarsius
sumber

Jawaban:

9

Cukup gunakan hlinesaja linebreak. Karya-karya berikut:

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

#+RESULTS:
| First | Second |
|-------+--------|
| a     | b      |
| c     | d      |
Tobias
sumber
Setelah bermain dengan :colnamesseperti yang disarankan dalam jawaban lain, sepertinya saya harus membuka permintaan fitur #+BEGIN_SRC ... :colnames yesjuga :colnames "| First | Second |". Sampai saat itu saya akan pergi dengan pendekatan ini.
tarsius
Hanya sebuah catatan dalam kasus orang menemukan ini tambahan membantu: Jika Anda tidak menggunakan quotenilai-nilai d untuk segala sesuatu (misalnya mungkin Anda menggunakan :varheader dan a, b, c, dll sebenarnya berasal variabel yang Anda gunakan listpada), hanya mengutip 'hlinesimbol itu sendiri.
lindes
3

Setelah menambahkan baris tajuk:

  1. Tetapkan #+NAME:ke blok kode.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Tambahkan #+CALL:pernyataan dengan :colnames yestajuk

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Jalankan #+CALL:pernyataan menggunakan C-c C-c.

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

Harapan itu membantu!


Kode Diuji menggunakan

GNU Emacs 24.5.1 (x86_64-unknown-cygwin, GTK + Versi 3.14.13)
versi-org: 8.3.2

Melioratus
sumber
Terima kasih. Untuk menghindari dua tabel, saya mengawali blok kode dan panggilan #+NAME: same-name. Karena saya masih harus menyetujui baris tajuk saat menggunakan pendekatan ini, saya akan pergi dengan solusi di jawaban lain.
tarsius
@tarsius Terima kasih telah memperbarui! BTW terima kasih telah mengajukan pertanyaan ini! Saya tahu beberapa cara berbeda untuk menambahkan header tabel yang mungkin bermanfaat bagi Anda. Saya akan melihat melalui catatan saya sebuah posting jawaban lain.
Melioratus