org-babel sbe语法

时间:2012-03-07 03:13:57

标签: emacs elisp org-mode org-babel

有人可以举例说明在sbe中使用ob-table.el功能吗?我必须遗漏一些东西,因为我无法让它与直接的elisp一起工作。

#+name: add1(x=1) :results silent
#+begin_src python
return x + 1
#+end_src

这有效:

| 1 | 2 | 3 | 4 |
#+TBLFM: @1$4='(sbe add1 (x $3))

但这不是:

#+begin_src emacs-lisp
(sbe add1 (x 2))
#+end_src
  

错误:错误的类型参数:sequencep,2

将2更改为列表只会进一步加剧:

#+begin_src emacs-lisp
(sbe add1 (x (list 2))
#+end_src
  

错误:错误的类型参数:buffer-or-string-p,2

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,你会尝试在表格之外使用你的命名源块来调用结果。

首先,您的:results silent属于#+begin_src行,而不属于#+name(仅在您直接评估该块时才相关)。我正在从python切换到emacs-lisp,因为我在这台机器上没有python,所以无法评估块,否则函数仍然等效。

#+name: add1(x=1)
#+begin_src emacs-lisp :results silent
  (+ x 1)
#+end_src

在Org Tables中,您使用的命令是#+tblfm: @1$4='(sbe add1 (x $3))

在表格之外使用代码块时,您必须改为使用#+CALL:(请参阅Evaluating Code Blocks)。

例如:

#+CALL: add1(x=2)

#+RESULTS: add1(x=2)
: 3

#+CALL: add1(4)

#+RESULTS: add1(4)
: 5

#+call: add1(add1(2))

#+RESULTS: add1(add1(2)
: 4

编辑(在评论中添加回答):

如果您只是想清理公式并更好地阅读它们以进行更改,公式编辑器C-c '将让您更清楚地看到它们并突出显示单元格引用以确保您选择正确的地区。