Generieren von Tabellen mit Headern aus Codeblock

9

Ich möchte Tabellen mit Headern aus Codeblöcken generieren. Etwas wie das:

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

Leider gibt es so etwas :table-header | First | Second |nicht. Oder besser gesagt, ich hoffe, dass ich etwas übersehen habe. (Hier verwende ich (identity ...)als Platzhalter für Code, der tatsächlich einen Wert berechnet.)

Diese Problemumgehung macht es für mich nicht ganz:

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

Ich muss den Inhalt des Codeblocks ändern und der resultierende Header ist eigentlich keine Headerzeile, sondern eine Zeile wie jede andere.

Gibt es ein spezielles Element, das das Einfügen eines Trennzeichens bewirkt (aber nicht zu 100% gleich, oben möchte ich vermeiden, dass Anweisungen zum Einrichten von Tabellen in den Codeblock eingefügt werden müssen). So etwas wie:

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

Antworten:

9

Verwenden Sie einfach hlineanstelle von linebreak. Folgendes funktioniert:

* 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
quelle
Nachdem er mit gespielt zu haben :colnamesin der anderen Antwort , wie vorgeschlagen, es sieht aus wie ich zu öffnen Feature - Request haben werden #+BEGIN_SRC ... :colnames yessowie :colnames "| First | Second |". Bis dahin werde ich diesen Ansatz verfolgen.
Tarsius
Nur ein Hinweis , falls jemand findet dies eine hilfreiche Ergänzung: Wenn Sie nicht mit quoted - Werten für alles (zB vielleicht sind Sie mit :varKopf- und a, b, cetc. tatsächlich Variablen ab , die Sie verwenden , listauf), sondern nur die zitieren 'hlineSymbol selbst.
Lindes
3

Nach dem Hinzufügen der Kopfzeile:

  1. Dem #+NAME:Codeblock zuweisen .

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. In #+CALL:Anweisung mit :colnames yesKopf

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Führen Sie die #+CALL:Anweisung mit aus C-c C-c.

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

Hoffe das hat geholfen!


Code getestet mit

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

Melioratus
quelle
Vielen Dank. Um zwei Tabellen zu vermeiden, habe ich sowohl dem Codeblock als auch dem Aufruf ein Präfix vorangestellt #+NAME: same-name. Da ich bei diesem Ansatz immer noch die Kopfzeile berücksichtigen muss, werde ich die Lösung in der anderen Antwort verwenden.
Tarsius
@tarsius Danke für das Update! Übrigens, danke, dass du diese Frage gestellt hast ! Ich kenne verschiedene Möglichkeiten, Tabellenüberschriften hinzuzufügen, die Sie möglicherweise hilfreich finden. Ich werde meine Notizen durchsehen und eine weitere Antwort posten.
Melioratus