Emacs 组织模式乳胶导出-使待办事项变为红色

Emacs 组织模式乳胶导出-使待办事项变为红色,emacs,latex,org-mode,Emacs,Latex,Org Mode,我在Emacs中使用组织模式,并使用导出到LaTeX选项。输出很好,但是我想展示: TODOs是红色的 唐斯是绿色的 所以他们脱颖而出 有没有办法?从ox-latex.el修改相应的函数 我将org latex format headline default函数从ox-latex.el复制到my.emacs,并添加了两个案例TODO和DONE。我建议不要替换原来的函数,而是将其放在.emacs中 当您导出到LaTeX时,它将使任何包含字符串的“TODO”变为红色,任何“DONE”变为绿色。确

我在Emacs中使用组织模式,并使用导出到LaTeX选项。输出很好,但是我想展示:

  • TODOs是红色的
  • 唐斯是绿色的
所以他们脱颖而出

有没有办法?

从ox-latex.el修改相应的函数 我将org latex format headline default函数从ox-latex.el复制到my.emacs,并添加了两个案例TODO和DONE。我建议不要替换原来的函数,而是将其放在.emacs中

当您导出到LaTeX时,它将使任何包含字符串的“TODO”变为红色,任何“DONE”变为绿色。确保你把

#+Latex_头:\usepackage{xcolor}

在你的组织标题中。 您只需在“格式”之后编辑字符串即可对其进行自定义。 如果有其他待办事项关键字,还可以添加更多案例

(defun org-latex-format-headline-colored-keywords-function
    (todo todo-type priority text tags info)
        (concat
           (cond ((string= todo "TODO")(and todo (format "{\\color{red}\\bfseries\\sffamily %s} " todo)))
   ((string= todo "DONE")(and todo (format "{\\color{green}\\bfseries\\sffamily %s} " todo))))
            (and priority (format "\\framebox{\\#%c} " priority))
            text
            (and tags
            (format "\\hfill{}\\textsc{%s}"
    (mapconcat (lambda (tag) (org-latex-plain-text tag info))
           tags ":")))))

(setq org-latex-format-headline-function 'org-latex-format-headline-colored-keywords-function)

这个答案似乎基本正确。只需要注意几点。您应该重命名默认函数,然后执行setq将org-latex-format-heading函数设置为函数名。检查文档中的该变量,以获取函数必须接受的参数及其含义的描述。当您有一个以上的逻辑测试时,使用cond之类的语句而不是多个if语句来提高清晰度。我也会考虑使用todo-Type,它是一个符号,而不是ToDo,它是一个字符串,它通常会生成更清晰的代码,而且通常效率更高。我无法使用todo类型代替与todo的字符串比较。Doc说,todo类型可以是todo、done或nil符号之一,但出口商说它不知道符号done。这是否可能被接受,或者我收到了使其可接受的请求?嗨,谢谢你的回答。很抱歉延迟接受您的答复。我只是最近才需要它。对我来说,这个解决方案突然不起作用了。问题似乎是在较新的组织模式版本中,
org latex格式标题函数
不再传递
info
参数。从参数列表中删除它(即
(todo-todo-type-priority-text-tags)
)对我来说解决了这个问题,而且一切似乎都正常,但我不知道这是否会产生一些不必要的副作用。