1
當我將文檔導出到LaTeX時,讓Emacs中的組織模式在每個標題中添加「DONE」關鍵字的最佳方法是什麼?現在我的設置在導出到LaTeX時在完成標題時組織模式導入
(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}
while normal LY不透它就像
% header stuff…
\begin{document}
\section{{\bfseries\sffamily DONE} test}
\end{document}
我必須使用\hsout
宏來使劃掉工作的標題。這種方法有幾個缺陷:
- 它取決於org-mode生成LaTeX代碼的方式。如果組織模式改變了這種方式,這種方法可能會中斷。
- 我必須在我的所有文檔中添加
LATEX_HEADER
。 - 一些標題有一個簡短的格式(
\section[aaaa]{bbbbbbb}
)。如果我想包含它,我必須爲我的elisp添加另一個醜陋的正則表達式,這已經非常醜陋。
因此我的問題在一開始。任何人都知道更好的方法?
這是一個非常有趣的問題。是否有可能請您添加一個LaTeX代碼示例,說明您希望導出在LaTeX文檔中看起來像是成品,以便此線程的讀者可以清楚地瞭解*之前的*和所需的* *?在我看來,我想象出口可能會調用一個LaTeX模板,並在'\ begin {document}'之後插入導出。 – lawlist
嗨@lawlist,我按照你的描述添加一些例子。至於模板,我無法找到改變它。我知道我可以更改模板以預覽膠乳片段,但不知道導出的文檔。 – MetroWind
它看起來像'ox-latex.el'有一個硬編碼的特定模板。如果你喜歡'ox-latex.el'將org標題轉換成'\ section'定義的方式(例如,在190行作爲'org-latex-classes'的一部分),那麼你可能會被限制爲格式是在該性質的定義中允許的。除了修改源文件,另一個選項是在'ox-latex.el'完成編譯之後運行的清理函數 - 例如replace-regexp。 。 .. – lawlist