Generando tablas con encabezados desde el bloque de código

9

Me gustaría generar tablas que tengan encabezados de bloques de código. Algo como esto:

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

Lamentablemente, algo así :table-header | First | Second |no existe. O más bien, espero pasar por alto algo. (Aquí estoy usando (identity ...)un marcador de posición para el código que realmente calcula un valor).

Esta solución alternativa no lo hace por mí:

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

Tengo que modificar el contenido del bloque de código y el encabezado resultante no es en realidad una fila de encabezado, es una fila como cualquier otra.

En relación con esto (pero no 100% igual, arriba me gustaría evitar tener que poner las instrucciones de configuración de la tabla dentro del bloque de código, a continuación se requiere), ¿hay algún elemento especial que provoque la inserción de un 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 |
tarsius
fuente

Respuestas:

9

Solo use en hlinelugar de linebreak. Los siguientes trabajos:

* 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
fuente
Después de haber jugado con :colnameslo sugerido en la otra respuesta, parece que tendré que abrir la solicitud de #+BEGIN_SRC ... :colnames yesfunción también :colnames "| First | Second |". Hasta entonces, seguiré con este enfoque.
tarsius
Sólo una nota por si alguien encuentra esto una adición útil: Si usted no está utilizando quotevalores d para todo (por ejemplo, tal vez usted está utilizando una :varcabecera y a, b, c, etc., están en realidad variables de las que utilice derivado listactivado), acaba de citar el 'hlinesímbolo en sí mismo.
lindes
3

Después de agregar la fila del encabezado:

  1. Asignar #+NAME:al bloque 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. Agregar #+CALL:declaración con :colnames yesencabezado

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Ejecute la #+CALL:instrucción usando C-c C-c.

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

Espero que haya ayudado!


Código probado usando

GNU Emacs 24.5.1 (x86_64-unknown-cygwin, GTK + Versión 3.14.13)
org-version: 8.3.2

Melioratus
fuente
Gracias. Para evitar tener dos tablas, prefijé el bloque de código y la llamada con #+NAME: same-name. Como todavía tengo que contrarrestar la fila del encabezado cuando uso este enfoque, iré con la solución en la otra respuesta.
tarsius
@tarsius Gracias por la actualización! Por cierto gracias por hacer esta pregunta! Conozco varias formas diferentes de agregar encabezados de tabla que pueden resultarle útiles. Revisaré mis notas y publicaré otra respuesta.
Melioratus