Tabellen genereren met headers uit codeblok

Ik wil tabellen genereren met kopteksten van codeblokken. Iets zoals dit:

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

Helaas is er zoiets als : table-header | Eerste | Second | bestaat niet. Of beter, ik hoop dat ik iets over het hoofd zie. (Hier gebruik ik (identiteit ...) als een plaatsaanduiding voor code die daadwerkelijk een waarde berekent.)

Deze oplossing doet het niet helemaal voor mij:

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

Ik moet de inhoud van het codeblok aanpassen en de resulterende kop is eigenlijk geen koprij, het is een rij zoals elke andere.

In verband hiermee (maar niet 100% hetzelfde, hierboven zou ik willen vermijden om de instructies voor het instellen van de tabel in het codeblok te plaatsen, daaronder dat vereist is), is er een speciaal element dat de invoeging veroorzaakt van een scheidingsteken? Zoiets als:

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

2 antwoord

Gebruik gewoon hline in plaats van linebreak . De volgende werken:

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

#+RESULTS:
| First | Second |
|-------+--------|
| a     | b      |
| c     | d      |
10
toegevoegd
Nadat ik heb gespeeld met : colnames zoals gesuggereerd in het andere antwoord, lijkt het erop dat ik het functieverzoek voor # + BEGIN_SRC ...: colnames yes ook moet openen als : colnames "| First | Second |" . Tot die tijd zal ik me bij deze benadering aansluiten.
toegevoegd de auteur num1, de bron
Gewoon een opmerking voor het geval iemand dit een nuttige aanvulling vindt: als u geen quote d-waarden voor alles gebruikt (u gebruikt bijvoorbeeld een : var header en < code> a , b , c , etc. zijn eigenlijk afgeleide variabelen die u gebruikt lijst aan), citeer gewoon de < code> 'hline -symbool zelf.
toegevoegd de auteur sempaiscuba, de bron

Na het toevoegen van de koprij:

  1. Assign #+NAME: to code block.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Add #+CALL: statement with :colnames yes header

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Run #+CALL: statement using C-c C-c.

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

Ik hoop dat dat hielp!


Code getest met

     

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

2
toegevoegd
Bedankt. Om te voorkomen dat ik twee tabellen had, prefixeerde ik zowel het codeblok als het gesprek met # + NAME: same-name . Aangezien ik nog steeds de ophef moet negeren bij het gebruik van deze benadering, ga ik met de oplossing in het andere antwoord.
toegevoegd de auteur num1, de bron
@tarsius Bedankt voor de update! Ik dank u voor het stellen van deze vraag! Ik ken verschillende manieren om tabelkoppen toe te voegen die u mogelijk nuttig vindt. Ik zal door mijn aantekeningen kijken en een ander antwoord plaatsen.
toegevoegd de auteur Draco18s, de bron