2

任何人都可以举出使用该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

4

1 回答 1

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:(请参阅评估代码块)。

例如:

#+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 '将让您更清楚地看到它们并突出显示单元格引用以确保您选择正确的区域。

于 2012-03-07T14:30:38.570 回答