我有一个大型组织文件,其中包含本学期我大学课程中的所有笔记。每个部分包含两个三级标题,称为“放映”和“读数”。在调用org-export-to-pdf
时,我想过滤掉所有这些标题并递归地推广这些部分的子标题(可能是对org-do-promote
的递归调用)。
虽然组织模式手册通常是这种事情的优秀资源,但我发现Advanced Configuration部分对于年轻,蓬勃发展的组织模式用户(又名我)来说有点简短。要充分掌握。如果经验丰富的Emacs用户可以指导我正确的方向来构建这个功能,那将非常感激。
答案 0 :(得分:2)
我使用org-map-entries
(Using the mapping API)上的文档以及手册Advanced Configuration部分中的摘要示例一起攻击了某些内容。
(defun promote-screenings-and-readings (&optional backend)
(org-map-entries
(lambda ()
(let ((point (point))
(heading
(buffer-substring-no-properties
(point)
(save-excursion
(forward-line)
(point)))))
(when
(or
(string= heading "*** Screenings\n")
(string= heading "*** Readings\n"))
(org-map-entries
(lambda ()
(unless (= (point) point)
(org-promote)))
nil
'tree)
(forward-line)
(delete-region point (point)))))))
(add-hook 'org-export-before-parsing-hook 'promote-screenings-and-readings)
promote-screenings-and-readings
提升子树中的所有条目,除子树的根目录外,然后删除标题。例如,在文件上运行它
* Foo
** Bar
*** Screenings
**** A
***** D
**** B
**** C
产生
* Foo
** Bar
*** A
**** D
*** B
*** C
警告:promote-screenings-and-readings
仅删除标题,而不是在第一次放映或阅读之前删除的内容。如果您需要,只需从lambda返回(point)
,而不是转发该行,使用最小点(如果存在)。