导出到LaTeX时,DONE标题上的组织模式突破

时间:2013-09-21 15:36:21

标签: emacs latex org-mode

当我将文档导出到LaTeX时,让Emacs中的org-mode在每个带有“DONE”关键字的标题上添加删除线的最佳方法是什么?现在我的设置是

(defun my-latex-filter-headline-done (text backend info)
  "Ensure dots in headlines."
  (when (org-export-derived-backend-p backend 'latex)
    (save-match-data
      (when (let ((case-fold-search t))
              (string-match "\\\\\\([a-z]+\\){\\(.*DONE.*\\)}"
                            text))
        (if (not (string-match ".*hsout.*" text))
            (replace-match "\\\\\\1{\\\\hsout{\\2}}"
                       t nil text))))))

(eval-after-load 'ox
  '(progn
     (add-to-list 'org-export-filter-headline-functions
                  'my-latex-filter-headline-done)))

在我的文件中我有

#+LATEX_HEADER: \DeclareRobustCommand{\hsout}[1]{\texorpdfstring{\sout{#1}}{#1}}

这样,如果我有一个像

这样的组织文件
* DONE test

它将导出为类似

的内容
% header stuff…
\begin{document}
\section{\hsout{{\bfseries\sffamily DONE} test}}
\end{document}

虽然通常没有透视,但它就像

% header stuff…
\begin{document}
\section{{\bfseries\sffamily DONE} test}
\end{document}

我必须使用\hsout宏来制作标题中的删除工作。这种方法有几个缺点:

  • 这取决于org-mode生成LaTeX代码的方式。如果org-mode改变了它的方式,这种方法可能会中断。
  • 我必须在我的所有文件中添加LATEX_HEADER
  • 有些标题有简短形式(\section[aaaa]{bbbbbbb})。如果我想要包含它,我必须在我的elisp中添加另一个丑陋的正则表达式,这已经非常难看了。

因此我的问题一开始。谁知道更好的方法?

1 个答案:

答案 0 :(得分:0)

这是部分。 。 。这将为您保存LATEX-HEADER的每个组织文件中的条目:

(setq org-latex-default-packages-alist
  '(("AUTO" "inputenc"  t)
    ("T1"   "fontenc"   t)
    (""     "fixltx2e"  nil)
    (""     "graphicx"  t)
    (""     "longtable" nil)
    (""     "float"     nil)
    (""     "wrapfig"   nil)
    (""     "rotating"  nil)
    ("normalem" "ulem"  t)
    (""     "amsmath"   t)
    (""     "textcomp"  t)
    (""     "marvosym"  t)
    (""     "wasysym"   t)
    (""     "amssymb"   t)
    (""     "hyperref"  nil)
    "\\tolerance=1000"
    "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}"
  ))

另一种选择是使用:

(setq org-latex-packages-alist
  '(
    "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}"
  ))

添加到alist的其他方法:

(add-to-list 'org-latex-packages-alist
  "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}")

(add-to-list 'org-latex-default-packages-alist
  "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}")