当我将文档导出到 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 中添加另一个丑陋的正则表达式,这已经很丑陋了。
因此,我一开始的问题。有人知道更好的方法吗?