table 的代码块结果为 属性 值

Code block result as property value for a table

我正在用 Org→Latex 写论文。除了单独的章节文件外,我还在一个单独的文件中跟踪整体结构和进度。我关注并必须报告的一件事是所写页数与预期长度的对比。

我可以使用 pdfinfo 获取各个章节中的物理页数,并使用代码块将其放入大纲中。我可以生成一个 "columnview" table 自动从大纲中的章节信息更新。我想知道如何将两者放在一起。

例子

希望这显示了我正在尝试做的事情。真人的话,明显多了十几章。

#+TITLE: Thesis Outline
#+COLUMNS: %2ID %35ITEM %Target_Pages{+}

#+NAME: count-pdf-pages
#+BEGIN_SRC elisp :exports none :var pdf-file=""
  (let
      ((pdf-file-info (shell-command-to-string (concat "pdfinfo " pdf-file))))
    (string-match "Pages:[[:blank:]]+\([0-9]+\)" pdf-file-info)
    (match-string 1 pdf-file-info)
    )
#+END_SRC

* Chapter outlines
  :PROPERTIES:
  :ID:       outlines
  :END:
** 1. Introduction
   :PROPERTIES:
   :Target_Pages:    5
   :END:
 This is the introduction of the thesis. It currently has this many pages:
 #+NAME: intro-page-count
 #+CALL: count-pdf-pages("latex/intro-chapter.pdf")

* Page Allocation and Completion
#+BEGIN: columnview :hlines 1 :id outlines
| ID       | ITEM               | Target_Pages |
|----------+--------------------+--------------|
| outlines | * Chapter outlines |            5 |
|          | ** 1. Introduction |            5 |
#+END

问题

我想做的是能够在末尾的大纲 table 中为每个章节使用 CALL 块的 return 值。但是,在阅读了手册的相关部分几次后,我看不出是否可以将标题的 属性(比如 Written_Pages)设置为代码块的结果。

显然,我也愿意接受其他组织方法来解决从多个代码调用的结果中生成 table 的问题。

可以使用 org-set-properties 通过 elisp 设置 Org 模式属性。例如,(org-set-properties "Written_Pages" "5")(注意属性值必须是字符串。所以只需添加一个额外的源代码块:

#+BEGIN_SRC elisp :export none :results none :var p=intro-page-count
(org-set-property "Written_Pages" p)

#+END_SRC