当我将文档导出到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
宏来制作标题中的删除工作。这种方法有几个缺点:
LATEX_HEADER
。\section[aaaa]{bbbbbbb}
)。如果我想要包含它,我必须在我的elisp中添加另一个丑陋的正则表达式,这已经非常难看了。因此我的问题一开始。谁知道更好的方法?
答案 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}}")