【问题标题】:Org-mode export filter all headlines matching pattern and promote subheaders组织模式导出过滤所有匹配模式的标题并提升子标题
【发布时间】:2017-10-30 06:43:03
【问题描述】:

我有一个很大的 org 文件,其中包含我本学期大学课程的所有笔记。每个部分包含两个三级标题,称为“放映”和“阅读”。在调用org-export-to-pdf 时,我想过滤掉所有这些标题并递归地提升这些部分的子标题(可能是对org-do-promote 的递归调用)。

虽然 org 模式手册通常是这类事情的绝佳资源,但我发现 Advanced Configuration 部分的详细信息有点简短,供年轻、蓬勃发展的 org 模式用户(又名我)掌握完全。如果更有经验的 Emacs 用户可以指导我正确的方向来构建这个函数,那将不胜感激。

【问题讨论】:

    标签: emacs org-mode


    【解决方案1】:

    我使用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),而不是转发该行,而是使用最小点(如果存在)。

    【讨论】:

    • 为什么不使用 ignore 标签,ox-extra ignore tag
    • 几个原因:首先,这个解决方案利用了问题发布者提到的特征,因此不仅解决了眼前的问题,而且可能有助于他们学习。其次,ox-extra 需要 org 版本 8.3,如您的链接中所述,而早期的 Emacsen(该解决方案仍然适用)最多只能提供 8.2。第三,即使是较新的 Emacsen,默认情况下也不提供 org-contrib(包含 ox-extra)。虽然许多人欣然接受,他们必须安装 org 两次,但我个人宁愿不这样做,除非真的需要。
    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多