Emacs组织:在出口期间推广子树的所有标题?

时间:2014-06-09 23:12:16

标签: emacs org-mode

我使用emacs org将部分组织文档导出到latex / pdf。我想知道是否有办法在出口过程中推广所选部分的所有标题。例如,假设文件如下所示:

* Project 1
** Task 1                   :export:
*** Introduction
    Text text text. 
*** Results
    Text text text. 
* Project 2

将emacs组织导出到latex将生成以下结构的tex文件:

\section{Project 1}
\subsection{Task 1}
\subsubsection{Introduction}
    Text text text. 
\subsubsection{Results}
    Text text text.

但是因为要导出的部分没有最高级别,所以拥有以下结构会更有意义:

\section{Task 1}
\subsection{Introduction}
    Text text text. 
\subsection{Results}
    Text text text.

或者,甚至更好:

\title{Task 1}
\maketitle
\section{Introduction}
    Text text text. 
\section{Results}
    Text text text.

我想知道是否有人知道如何解决这个问题?不幸的是,我的lisp技能非常简陋,似乎不应该太难。

谢谢!

斯蒂芬

1 个答案:

答案 0 :(得分:4)

您可以通过在.emacs添加以下内容来实现您描述的第一个行为:

;; Define a function for turning a single subtree into a top-level tree
;; (:export: headings might be located at an arbitrary nesting level,
;; so a single call to "org-promote-subtree" is not enough):
(defun org-promote-to-top-level ()
  "Promote a single subtree to top-level."
  (let ((cur-level (org-current-level)))
    (loop repeat (/ (- cur-level 1) (org-level-increment))
          do (org-promote-subtree))))

;; Define a function that applies "org-promote-to-top-level" 
;; to each :export: subtree:
(defun org-export-trees-to-top-level (backend)
  "Promote all subtrees tagged :export: to top-level.
BACKEND is the export back-end being used, as a symbol."
  (org-map-entries 'org-promote-to-top-level "+export"))

;; Make org-mode run "org-export-subtrees-to-top-level" as part of the export
;; process:
(add-hook 'org-export-before-parsing-hook 'org-export-trees-to-top-level)

实现第二种行为有点棘手,但如果您最终需要的话,可以使用org-export-trees-to-top-level函数作为起点。不过,我想指出,这对于具有多个:export:子树的文件不起作用(除非您还想出一种方法来决定哪个标题将成为\title在这些情况下)。


来源: