Generazione di tabelle con intestazioni dal blocco di codice


9

Vorrei generare tabelle che hanno intestazioni da blocchi di codice. Qualcosa come questo:

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

Purtroppo qualcosa del genere :table-header | First | Second |non esiste. O meglio, spero di trascurare qualcosa. (Qui sto usando (identity ...)come segnaposto per il codice che calcola effettivamente un valore.)

Questa soluzione alternativa non lo fa abbastanza per me:

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

Devo modificare il contenuto del blocco di codice e l'intestazione risultante non è in realtà una riga di intestazione, è una riga come qualsiasi altra.

In relazione a questo (ma non al 100% lo stesso, sopra vorrei evitare di dover inserire le istruzioni di impostazione della tabella all'interno del blocco di codice, sotto quello richiesto), c'è un elemento speciale che causa l'inserimento di un separatore? Qualcosa di simile a:

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

Risposte:


9

Basta usare hlineinvece di linebreak. Le seguenti opere:

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

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

Dopo aver giocato con :colnamescome suggerito in altra risposta, sembra che dovrò richiesta di funzionalità aperto per #+BEGIN_SRC ... :colnames yescosì come :colnames "| First | Second |". Fino ad allora seguirò questo approccio.
tarsius

Solo una nota nel caso qualcuno trova questo un'aggiunta utile: se non si sta utilizzando quotei valori d per tutto (ad esempio forse si sta utilizzando un :varcolpo di testa e a, b, c, ecc, sono in realtà derivato variabili che si utilizza listsu), basta citare la 'hlinesimbolo stesso.
termina il

3

Dopo aver aggiunto la riga di intestazione:

  1. Assegna #+NAME:a blocco di codice.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Aggiungi #+CALL:istruzione con :colnames yesintestazione

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Eseguire l' #+CALL:istruzione usando C-c C-c.

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

Spero che abbia aiutato!


Codice testato utilizzando

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


Grazie. Per evitare di avere due tabelle ho anteposto sia il blocco di codice sia la chiamata con #+NAME: same-name. Dato che devo usare ancora la riga di intestazione quando uso questo approccio, andrò con la soluzione nell'altra risposta.
tarsius

@tarsius Grazie per l'aggiornamento! A proposito grazie per aver posto questa domanda! Conosco diversi modi per aggiungere intestazioni di tabella che potresti trovare utili. Esaminerò i miei appunti e posterò un'altra risposta.
Melioratus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.