Generowanie tabel z nagłówkami z bloku kodu

9

Chciałbym wygenerować tabele zawierające nagłówki z bloków kodu. Coś takiego:

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

Niestety coś takiego :table-header | First | Second |nie istnieje. A raczej mam nadzieję, że coś przeoczę. (Tutaj używam (identity ...)jako symbolu zastępczego dla kodu, który faktycznie oblicza wartość.)

To obejście nie robi tego dla mnie:

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

Muszę zmodyfikować zawartość bloku kodu, a wynikowy nagłówek nie jest tak naprawdę wierszem nagłówka, jest wierszem jak każdy inny.

W związku z tym (ale nie w 100% taki sam, powyżej chciałbym uniknąć umieszczania instrukcji konfiguracji tabeli wewnątrz bloku kodu, poniżej tego jest wymagane), czy jest jakiś specjalny element, który powoduje wstawienie separatora? Coś jak:

#+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 |
Tarsjusz
źródło

Odpowiedzi:

9

Po prostu użyj hlinezamiast linebreak. Następujące prace:

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

#+RESULTS:
| First | Second |
|-------+--------|
| a     | b      |
| c     | d      |
Tobiasz
źródło
Po zagraniu :colnameszgodnie z sugestią zawartą w drugiej odpowiedzi wygląda na to, że będę musiał otworzyć prośbę o #+BEGIN_SRC ... :colnames yesdodanie funkcji :colnames "| First | Second |". Do tego czasu będę stosować to podejście.
Tarsius
Tylko uwaga na wypadek gdyby ktoś znajdzie to pomocne dodatek: Jeśli nie używasz quotewartości d do wszystkiego (np może używasz :varnagłówka i a, b, c, itd. Są rzeczywiście pochodzi zmienne, które używasz listna), tylko przytoczyć 'hlinesam symbol.
lipes
3

Po dodaniu wiersza nagłówka:

  1. Przypisz #+NAME:do bloku kodu.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Dodaj #+CALL:instrukcję z :colnames yesnagłówkiem

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Uruchom #+CALL:instrukcję za pomocą C-c C-c.

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

Mam nadzieję, że to pomogło!


Kod przetestowany przy użyciu

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

Melioratus
źródło
Dzięki. Aby uniknąć dwóch tabel, poprzedziłem zarówno blok kodu, jak i wywołanie za pomocą #+NAME: same-name. Ponieważ nadal muszę sprawdzać wiersz nagłówka, korzystając z tego podejścia, skorzystam z rozwiązania w innej odpowiedzi.
Tarsius
@tarsius Dziękujemy za aktualizację! BTW, dziękuję, że zadałeś to pytanie! Znam kilka różnych sposobów dodawania nagłówków tabel, które mogą okazać się pomocne. Przejrzę moje notatki i opublikuję kolejną odpowiedź.
Melioratus