2013-09-21 36 views
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添加另一個醜陋的正則表達式,這已經非常醜陋。

因此我的問題在一開始。任何人都知道更好的方法?

+0

這是一個非常有趣的問題。是否有可能請您添加一個LaTeX代碼示例,說明您希望導出在LaTeX文檔中看起來像是成品,以便此線程的讀者可以清楚地瞭解*之前的*和所需的* *?在我看來,我想象出口可能會調用一個LaTeX模板,並在'\ begin {document}'之後插入導出。 – lawlist

+0

嗨@lawlist,我按照你的描述添加一些例子。至於模板,我無法找到改變它。我知道我可以更改模板以預覽膠乳片段,但不知道導出的文檔。 – MetroWind

+0

它看起來像'ox-latex.el'有一個硬編碼的特定模板。如果你喜歡'ox-latex.el'將org標題轉換成'\ section'定義的方式(例如,在190行作爲'org-latex-classes'的一部分),那麼你可能會被限制爲格式是在該性質的定義中允許的。除了修改源文件,另一個選項是在'ox-latex.el'完成編譯之後運行的清理函數 - 例如replace-regexp。 。 .. – lawlist

回答

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}}") 
+0

有趣。我不知道我可以將任意宏放入該變量中。謝謝~~ – MetroWind

相關問題