Генерування таблиць із заголовками з блоку коду


9

Я б хотів генерувати таблиці, які мають заголовки з кодових блоків. Щось на зразок цього:

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

На жаль, щось подібне :table-header | First | Second |не існує. А точніше, я сподіваюся, що щось переглядаю. (Тут я використовую (identity ...)як заповнювач для коду, який фактично обчислює значення.)

Таке вирішення не зовсім для мене:

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

Я повинен змінити вміст блоку коду, і одержуваний заголовок насправді не є рядком заголовка, його рядком, як і будь-яким іншим.

З цим (але не на 100% те саме, вище я хотів би уникнути необхідності розміщувати інструкції зі встановлення таблиці всередині блоку коду, нижче необхідного), чи є спеціальний елемент, який викликає вставлення роздільника? Щось на зразок:

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

Відповіді:


9

Просто використовуйте hlineзамість linebreak. Наступні роботи:

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

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

Зігравши з, :colnamesяк було запропоновано в іншій відповіді, схоже, що мені доведеться також відкрити запит на #+BEGIN_SRC ... :colnames yesфункції :colnames "| First | Second |". До цього часу я піду з таким підходом.
Тарсій

Тільки примітка в разі , якщо хто вважає , що це корисне доповнення: Якщо ви не використовуєте quoteзначення d для всього (наприклад , може бути , ви використовуєте :varзаголовок і a, b, cі т.д., на самому ділі отримані змінні , які ви використовуєте listна), просто процитувати 'hlineсам символ.
lindes

3

Після додавання рядка заголовка:

  1. Призначити #+NAME:до кодового блоку.

    #+NAME: needs-a-table-header
    #+BEGIN_SRC emacs-lisp :results value table 
      (cons (list "First" "Second")
            (identity '((a b) (c d))))
    #+END_SRC
    
  2. Додати #+CALL:оператор із :colnames yesзаголовком

    #+CALL: needs-a-table-header() :colnames yes 
    
  3. Запустити #+CALL:оператор, використовуючи C-c C-c.

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

Сподіваюся, що допомогло!


Код Випробувано за допомогою

GNU Emacs 24.5.1 (x86_64-unknown-cygwin, GTK + Версія 3.14.13)
org-версія: 8.3.2


Дякую. Щоб не було двох таблиць, я встановив префікс і блоку коду, і дзвінка #+NAME: same-name. Оскільки мені все ж доводиться зазначати рядок заголовка при використанні цього підходу, я перейду з рішенням в іншій відповіді.
Тарсій

@tarsius Дякуємо за оновлення! До речі, дякую за запитання! Я знаю кілька різних способів додати заголовки таблиць, які вам можуть бути корисними. Я перегляну через свої замітки пост ще одну відповідь.
Меліорат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.