【发布时间】:2021-05-14 23:02:31
【问题描述】:
假设我定义了这些属性:
:PROPERTIES:
:a: 1
:b: 2
:END:
我如何定义属性 c,使其值为属性 a 的值和属性 b 的值之和?我试过:c: (+ a b),但c的值只是字符串"(+ a b)"。
是否可以以这种方式定义属性,或者我必须有一个代码块然后进行评估? (例如使用 Properties API)
【问题讨论】:
假设我定义了这些属性:
:PROPERTIES:
:a: 1
:b: 2
:END:
我如何定义属性 c,使其值为属性 a 的值和属性 b 的值之和?我试过:c: (+ a b),但c的值只是字符串"(+ a b)"。
是否可以以这种方式定义属性,或者我必须有一个代码块然后进行评估? (例如使用 Properties API)
【问题讨论】:
您可以使用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()
这会将任何现有条目留在缓冲区中,但会在导出中覆盖。
您还可以使用 (org-babel-load-file) 更正缓冲区内。
【讨论】: