代码块结果作为表的属性值

时间:2015-08-27 07:19:36

标签: emacs org-mode

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

我可以使用pdfinfo来获取各章中的物理页数,并使用代码块将其添加到大纲中。我可以生成一个“列视图”表,该表自动从大纲中的章节信息更新。我想知道如何将两者放在一起。

实施例

希望这显示了我正在尝试做的事情。事实上,显然更像是十几章。

#+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

问题

我想要做的是能够在最后的大纲表中为每个章节使用CALL块的返回值。但是,通过阅读本手册的相关部分几次,我无法确定是否可以将标题的属性(例如Written_Pages)设置为代码块的结果。

显然,我也倾向于采用其他组织方式解决从多个代码调用的结果生成表的问题。

1 个答案:

答案 0 :(得分:1)

可以使用org-set-properties通过elisp设置组织模式属性。例如,(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