Emacs Org-mode:从另一个属性的值派生属性值

Swi*_*Joe 5 emacs org-mode

假设我定义了这些属性:

:PROPERTIES:
:a: 1
:b: 2
:END:
Run Code Online (Sandbox Code Playgroud)

如何定义属性 c ,使其值是 property 的值a和 property 的值之和b?我已经尝试过:c: (+ a b),但 c 的值只是 string "(+ a b)"

是否可以以这种方式定义属性,或者我是否必须有一个随后被评估的代码块?(例如使用属性 API)

小智 1

您可以使用Property API定义在导出时执行的代码块:

* Code

#+NAME: PropertyCalculator
#+BEGIN_SRC emacs-lisp
  (let* ( (rootval (string-to-number (org-entry-get nil "root")))
       (squareval (number-to-string (* rootval rootval))) )
    (org-entry-put nil "square" squareval)
    )
#+END_SRC

* Content
** Property Data
:PROPERTIES:
:root:     2
:square:   5
:END:

#+CALL: PropertyCalculator()
Run Code Online (Sandbox Code Playgroud)

这会将任何现有条目保留在缓冲区中,但会在导出时覆盖。

您还可以使用 (org-babel-load-file) 更正缓冲区内。