在org-mode导出latex时自动去除TODO标签

正在用org写论文. 使用了TODO来做任务的管理,结果导出时每一个标题上的前面都有TODO,给标题打的标签也输出在了标题的后面,于是在想「有没有在这方面做输出选择删去选项的啊」. 但是稍微搜了一下后发现只有说在tex文档最前面添加设置的模版,而没有这方面的选项,在orgguide里也没有看见提到. 想问有人知道有能够在导出latex时以一定条件自动删去内容的方法吗?

肯定有,看看 org 的文档吧,实在找不到办法,就是写 headline hook,把 TODO 替换为 “”

org-export-filter-headline-functions is a variable defined in ‘ox.el’.

Its value is (eh-org-wash-text)

  This variable may be risky if used as a file-local variable.

List of functions applied to a transcoded headline.
Each filter is called with three arguments: the transcoded data,
as a string, the back-end, as a symbol, and the communication
channel, as a plist.  It must return a string or nil.

我用的一个函数也给你作为参考吧

(defun eh-org-wash-text (text backend _info)
  "导出 org file 时,删除中文之间不必要的空格。"
  (when (org-export-derived-backend-p backend 'html)
    (let ((regexp "[[:multibyte:]]")
          (string text))
      ;; org-mode 默认将一个换行符转换为空格,但中文不需要这个空格,删除。
      (setq string
            (replace-regexp-in-string
             (format "\\(%s\\) *\n *\\(%s\\)" regexp regexp)
             "\\1\\2" string))
      ;; 删除粗体之后的空格
      (dolist (str '("</b>" "</code>" "</del>" "</i>"))
        (setq string
              (replace-regexp-in-string
               (format "\\(%s\\)\\(%s\\)[ ]+\\(%s\\)" regexp str regexp)
               "\\1\\2\\3" string)))
      ;; 删除粗体之前的空格
      (dolist (str '("<b>" "<code>" "<del>" "<i>" "<span class=\"underline\">"))
        (setq string
              (replace-regexp-in-string
               (format "\\(%s\\)[ ]+\\(%s\\)\\(%s\\)" regexp str regexp)
               "\\1\\2\\3" string)))
      string)))