Gerando tabelas com cabeçalhos a partir do bloco de código

9

Eu gostaria de gerar tabelas que tenham cabeçalhos a partir de blocos de código. Algo assim:

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

Infelizmente, algo como :table-header | First | Second |isso não existe. Ou melhor, espero que eu esteja negligenciando algo. (Aqui estou usando (identity ...)como um espaço reservado para o código que realmente calcula um valor.)

Esta solução alternativa não é suficiente para mim:

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

Eu tenho que modificar o conteúdo do bloco de código e o cabeçalho resultante não é realmente uma linha de cabeçalho, é uma linha como qualquer outra.

Relacionado a isso (mas não 100% o mesmo, acima, eu gostaria de evitar ter que colocar as instruções de configuração da tabela dentro do bloco de código, abaixo do necessário), existe um elemento especial que causa a inserção de um separador? Algo como:

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

Respostas:

9

Basta usar em hlinevez de linebreak. Os seguintes trabalhos:

* 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
fonte
Depois de jogar :colnamescomo sugerido na outra resposta, parece que terei que abrir a solicitação de recurso #+BEGIN_SRC ... :colnames yese também :colnames "| First | Second |". Até lá, irei com essa abordagem.
tarsius 8/03/16
Apenas uma nota no caso de alguém acha isso uma adição útil: Se você não estiver usando quotevalores de d para tudo (por exemplo, talvez você esteja usando um :varcabeçalho e a, b, c, etc, são variáveis que você usa realmente derivado liston), apenas citar o 'hlinepróprio símbolo.
Lindes
3

Depois de adicionar a linha do cabeçalho:

  1. Atribuir #+NAME:ao bloco de código.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Adicionar #+CALL:instrução com :colnames yescabeçalho

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Execute a #+CALL:instrução usando C-c C-c.

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

Espero que tenha ajudado!


Código testado usando

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

Melioratus
fonte
Obrigado. Para evitar duas tabelas, prefixei o bloco de códigos e a chamada com #+NAME: same-name. Como ainda tenho que contrariar a linha do cabeçalho ao usar essa abordagem, seguirei a solução na outra resposta.
tarsius
@ tarsius Obrigado pela atualização! BTW, obrigado por fazer esta pergunta! Conheço várias maneiras diferentes de adicionar cabeçalhos de tabela que podem ser úteis. Vou dar uma olhada nas minhas anotações e postar outra resposta.
Melioratus 8/16