1

当我将文档导出到 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 中添加另一个丑陋的正则表达式,这已经很丑陋了。

因此,我一开始的问题。有人知道更好的方法吗?

4

1 回答 1

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}}")
于 2013-09-22T00:53:35.443 回答