5.5 Breaking Down Tasks into Subtasks

通常建议将大型任务拆分为更小、可管理的子任务。 你可以在待办事项下方创建大纲树,在树上设置详细子任务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


Footnotes

(48)

若要将子任务排除在全局待办列表之外,参见选项 org-agenda-todo-list-sublevels