通常建议将大型任务拆分为更小、可管理的子任务。 你可以在待办事项下方创建大纲树,在树上设置详细子任务48。 为概览已标记完成的子任务比例,可在标题任意位置插入 ‘[/]’ 或 ==。 每当子项待办状态变更,或在标记上按下 C-c C-c 时,这些标记会自动更新。示例:
* Organize Party [33%] ** TODO Call people [1/2] *** TODO Peter *** DONE Sarah ** TODO Buy food ** DONE Talk to neighbor
若一个标题下方同时存在复选框和待办子项,统计标记的含义会变得模糊。 将属性 ‘COOKIE_DATA’ 设为 ‘checkbox’ 或 ‘todo’ 即可解决该问题。
若希望统计标记计算子树中所有待办条目(而非仅直接子项),
可配置变量 org-hierarchical-todo-statistics 。
若仅对单个子树生效,可在 ‘COOKIE_DATA’ 属性值中加入 ‘recursive’ 。
* Parent capturing statistics [2/20] :PROPERTIES: :COOKIE_DATA: todo recursive :END:
若希望待办条目在所有子项完成时自动变为完成状态,可使用如下配置:
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
(let (org-log-done org-todo-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
另一种方法是使用复选框标识子任务(层级),参见 Checkboxes。