การสร้างตารางที่มีส่วนหัวจากการบล็อกรหัส


9

ฉันต้องการสร้างตารางที่มีส่วนหัวจากบล็อคโค้ด บางสิ่งเช่นนี้

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

แต่น่าเสียดายที่บางอย่างเช่น:table-header | First | Second |ไม่ได้อยู่ หรือฉันหวังว่าจะได้เห็นบางสิ่งบางอย่าง (ที่นี่ฉันใช้(identity ...)เป็นตัวยึดตำแหน่งสำหรับรหัสซึ่งคำนวณค่าจริง)

วิธีแก้ปัญหานี้ไม่ได้ทำเพื่อฉัน:

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

ฉันต้องแก้ไขเนื้อหาของ code block และส่วนหัวของผลลัพธ์ไม่ได้เป็นแถวส่วนหัวจริง ๆ เป็นแถวเหมือนส่วนอื่น ๆ

ที่เกี่ยวข้องกับสิ่งนี้ (แต่ไม่เหมือนกัน 100% ข้างต้นฉันต้องการหลีกเลี่ยงการใส่คำแนะนำการตั้งค่าตารางในบล็อกรหัสด้านล่างที่จำเป็น) มีองค์ประกอบพิเศษที่ทำให้เกิดการแทรกตัวคั่นหรือไม่ สิ่งที่ต้องการ:

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

คำตอบ:


9

เพียงแค่ใช้แทนhline linebreakผลงานดังต่อไปนี้:

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

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

หลังจากที่มีการเล่นกับ:colnamesตามที่แนะนำในคำตอบอื่น ๆ ก็ดูเหมือนว่าฉันจะต้องขอคุณสมบัติเปิดเช่นเดียวกับ#+BEGIN_SRC ... :colnames yes :colnames "| First | Second |"จนแล้วฉันจะไปด้วยวิธีนี้
Tarsius

เพียงแค่ทราบในกรณีที่คนนี้พบว่านอกจากนี้ที่เป็นประโยชน์: หากคุณไม่ได้ใช้quoteค่า d สำหรับทุกอย่าง (เช่นบางทีคุณอาจกำลังใช้:varส่วนหัวและส่วนa, b, cและอื่น ๆ ที่ได้รับตัวแปรที่คุณใช้จริงlistๆ ) เพียงแค่พูด'hlineสัญลักษณ์ตัวเอง
lindes

3

หลังจากเพิ่มแถวส่วนหัว:

  1. กำหนดให้#+NAME:กับรหัสบล็อก

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. เพิ่ม#+CALL:คำสั่งที่มี:colnames yesส่วนหัว

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. เรียกใช้คำสั่งโดยใช้#+CALL:C-c C-c

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

หวังว่าจะช่วย!


รหัสทดสอบโดยใช้

GNU Emacs 24.5.1 (x86_64-unknown-cygwin, GTK + เวอร์ชั่น 3.14.13)
org-version: 8.3.2


ขอบคุณ #+NAME: same-nameเพื่อหลีกเลี่ยงตารางที่สองที่ผมนำหน้าทั้งการป้องกันรหัสและสายด้วย เนื่องจากฉันยังคงมีข้อเสียแถวส่วนหัวเมื่อใช้วิธีนี้ฉันจะไปกับการแก้ปัญหาในคำตอบอื่น ๆ
Tarsius

@tarsius ขอบคุณสำหรับการอัพเดท! BTW ขอบคุณที่ถามคำถามนี้! ฉันรู้หลายวิธีในการเพิ่มส่วนหัวของตารางซึ่งคุณอาจพบว่ามีประโยชน์ ฉันจะดูบันทึกย่อของฉันเพื่อโพสต์คำตอบอื่น
Melioratus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.