【发布时间】:2013-09-21 15:36:21
【问题描述】:
当我将文档导出到 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 中添加另一个丑陋的正则表达式,这已经很丑陋了。
因此我一开始的问题。谁知道更好的方法?
【问题讨论】:
-
这是一个非常有趣的问题。您是否可以添加一个 LaTeX 代码示例,说明您希望导出在 LaTeX 文档中看起来像成品,以便该线程的读者清楚地了解 之前 和想要的之后?在我看来,我设想导出可能会调用 LaTeX 模板并在
\begin{document}之后插入导出。 -
嗨@lawlist,我添加了一些你描述的例子。至于模板,反正我也找不到改的。我知道我可以更改预览乳胶片段的模板,但不确定导出的文档。
-
看起来
ox-latex.el有一个硬编码的特定模板。如果您喜欢ox-latex.el将组织标题转换为\section定义的方式(例如,在第 190 行作为org-latex-classes的一部分),那么您可能仅限于该定义中允许的格式类型自然。除了修改源之外,另一种选择是在ox-latex.el完成编译后运行一个清理函数——例如,replace-regexp。 . ..