Emacs學習筆記(9):org-mode,最好的文檔編輯利器,沒有之一


  本文最新版已遷移至:http://thinkinside.tk/emacs_orgmode_editor.html

org-mode: 最好的文檔編輯利器,沒有之一

盡管按照org-mode 官方 的說法,Org 是一個基於快速高效的文本方式來實現做筆記、管理待辦事項(TODO list)以及做項目計划的模式(Org is a mode for keeping notes, maintaining TODO lists, and doing project planning with a fast and effective plain-text system ),但 Org-mode 首先是最好的文檔編輯利器,沒有之一。

我之前用過很多年M$ Word, 也嘗試過OpenOffice/LibreOffice Writer,以及iWorks Pager,但都不理想,寫文檔是沒有痛快淋漓的感覺。直到后來發現了Omni Outliner , 才終於找到了寫作的樂趣。 但是了解了org-mode之后,發現原來一切都是浮雲。只有Org-mode才是終極的解決之道。 使用org-mode寫文檔的時候,你只需要關注內容本身,而不需要寫上幾個字,選中它們按Ctl-B,或者停下來用鼠標去點擊“標題1”,更甚覺得那個標題格式不順眼,開始去調整樣式,而停下寫作的思路。

BTW,Omni Outliner似乎也是從Org-mode找到的靈感,有圖為證:

其功能與Org-mode 幾乎一樣,而且這貨居然支持emacs快捷鍵!

盡管Omni Outliner以GUI的方式實現了org-mode的功能,但是並不是很理想:它的內容是“所見即所得”的,很多時候你難以更改其樣式,而且只能在Mac OS下使用。 而Org-mode使用文本方式,具有如下優勢:

  • 格式通用,系統無關,軟件無關
  • 體積小,速度快
  • “所想即所得”,比“所見即所得”更人性化

可以說,正是由於有了 Org-Mode, Emacs 處理文本的能力才得到了大幅度的提高,使得Emacs能夠被非程序員接受。 如果說LaTex是排版的終極,那么Org-mode就是編輯的終極。Emacs 22 以后的版本已經集成了 org-mode,打開 .org 擴展的文件會自動進入 org 模式。此外,Vim下面也有了對應的Org-mode。

本文介紹最基本的編輯、格式化文本以及導出功能,后續再討論高級玩法。

1 用大綱組織內容

盡管Org-mode的功能不斷豐富,現在已經可以記筆記,管理個人事務,制定項目計划以及很多其他的用途,但是最初和最基本的功能還是通過大綱(outline)的方式來編輯文檔。 而且,無論是筆記管理,任務管理還是項目計划的編寫,都是以對內容進行高效的組織(organization)為基礎的。

在編輯文檔,尤其是大型文檔的時候,對內容的組織就顯得尤為重要。經常需要在文檔中快速定位,只關注某一部分的內容, Word之類的編輯器,通過文檔結構圖來定位文檔位置,速度很慢,而且很多時候不能滿足編輯的需要。盡管Word也提供了“大綱視圖”,但是,唉……不說也罷, 如果那個功能真的好用,也就不需要Omni Outliner了。

Org-mode天然支持大綱視圖,通過在文檔中定義標題,可以方便的瀏覽每個小節,從而把握文檔的總體內容。 Org是基於Outline模式的,它提供了更靈活的編輯結構文件的命令。比如折疊文檔,針對大綱的編輯功能等,極其強大。

1.1 定義標題

要實現大綱,首先要定義標題。用emacs新建一個orgmode.org,輸入如下內容:

* org-mode
** 大綱
正在編寫大綱
** 輕量級標記語言
* 可以導出其他格式
支持html,pdf等格式

注意:

  1. * 要位於每行的行首
  2. * 之后要有一個空格,然后再輸入標題
  3. 連續幾個*就表示是第幾級大綱,最多支持10級。

此時看起來應該是這個樣子:

org-mode

覺得沒什么出奇的地方,只是改變了一些顏色?其真正的用處在於可以通過大綱操作文檔,包括折疊,定位和編輯。而這些操作都通過快捷鍵實現,非常有效率。尤其是對大文檔。

1.2 大綱相關的快捷鍵

 
1.2.1 折疊大綱
 
快捷鍵 命令 說明
S-TAB org-shifttab 循環切換整個文檔的大綱狀態(三種狀態:折疊,打開下一級,打開全部)
TAB org-cycle 循環切換光標所在大綱的狀態
1.2.2 在大綱之間移動
 
快捷鍵 命令 說明
C-c C-n/p   下/上一標題
C-c C-f/b   下/上一標題(僅限同級標題)
C-c C-u   跳到上一級標題
C-c C-j   切換到大綱瀏覽狀態
1.2.3 基於大綱的編輯
 
快捷鍵 命令 說明
M-RET   插入一個同級標題
M-S-RET   插入一個同級TODO 標題
M-LEFT/RIGHT   將當前標題升/降級
M-S-LEFT/RIGHT   將子樹升/降級
M-S-UP/DOWN   將子樹上/下移
C-c *   將本行設為標題/正文
C-c C-w   將子樹或區域移動到另一標題處(跨緩沖區)
C-x n s/w   只顯示當前子樹/返回
C-c C-x b   在新緩沖區顯示當前分支(類似C-x n s)
C-c /   只列出包含搜索結果的大綱,並高亮,支持多種搜索方式
C-c C-c   取消高亮

更多的快捷鍵可以通過C-c C-x C-h查看。

1.3 大綱的顯示方式

默認的大綱顯示沒有縮進,顯得有些亂。可以用 M-x org-indent-mode切換到另一種顯示方式:

如果想讓某個文件默認用這種方式打開,可以在文件頭部增加:

#+STARTUP: indent

如果希望打開所有org文件都默認用這種方式,可以在.emacs中配置:

(setq org-startup-indented t)

2 超鏈接和圖文混排

超鏈接也是組織內容的一種非常有效的方式。Org 支持多種超鏈接。對於符合要求的圖片鏈接,可以形成圖文混排。

2.1 創建鏈接

對於符合鏈接規則的內容,org-mode會自動將其視為鏈接,包括括文件、網頁、郵箱、新聞組、BBDB 數據庫項、IRC 會話和記錄等。下面是一些例子:

http://www.astro.uva.nl/~dominik            on the web
file:/home/dominik/images/jupiter.jpg       file, absolute path
/home/dominik/images/jupiter.jpg            same as above
file:papers/last.pdf                        file, relative path
file:projects.org                           another Org file
docview:papers/last.pdf::NNN                open file in doc-view mode at page NNN
id:B7423F4D-2E8A-471B-8810-C40F074717E9     Link to heading by ID
news:comp.emacs                             Usenet link
mailto:adent@galaxy.net                     Mail link
vm:folder                                   VM folder link
vm:folder#id                                VM message link
wl:folder#id                                WANDERLUST message link
mhe:folder#id                               MH-E message link
rmail:folder#id                             RMAIL message link
gnus:group#id                               Gnus article link
bbdb:R.*Stallman                            BBDB link (with regexp)
irc:/irc.com/#emacs/bob                     IRC link
info:org:External%20links                   Info node link (with encoded space)

對於文件鏈接,可以用::后面增加定位符的方式鏈接到文件的特定位置。定位符可以是行號或搜索選項。如:

file:~/code/main.c::255                     進入到 255 行
file:~/xx.org::My Target                    找到目標‘<<My Target>>’
file:~/xx.org/::#my-custom-id               查找自定義 id 的項

除了上述的自動鏈接外,還可以顯示指定鏈接,采用如下格式:

[[link][description]]
[[link]]

顯示指定的鏈接可以不顯示原始的URL而是顯示對該鏈接的描述。 這種方式可以用相對路徑鏈接本地文件。

對於顯示指定的鏈接,即可以手工輸入,也可以用org-mode提供的快捷鍵進行編輯:

 
快捷鍵 命令 說明
C-c l   保存鏈接
C-c C-l org-insert-link 創建或修改鏈接,可以引用已保存的鏈接
C-c C-o org-open-at-point 打開鏈接
 
C-c %   記錄內部鏈接地址
C-c &   跳轉到已記錄的內部鏈接

2.2 內部鏈接

前面的例子都是外部鏈接,Org-mode還支持內部鏈接:

定義錨點 #<<my-anchor>>
[[my-anchor][內部鏈接]]

腳注可以看作是一種特殊的內部鏈接,但是要求具有"fn:"前綴:

添加腳注鏈接 [[fn:footprint1][腳注1]]
定義腳注 [fn:footprint1]

2.3 顯示圖片

盡管不看重"所見即所得",但有時候能夠看到圖文混排的內容還是很有必要的。通過iimage這個minor mode,可以在Org-mode中顯示圖片。

下載 iimage.el 文件扔到 Emacs 的目錄里,然后在 .emacs 里添加下面的代碼:

;; iimage mode
(autoload 'iimage-mode "iimage" "Support Inline image minor mode." t)
(autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t)

然后就可以用命令

M-x iimage-mode RET

在當前模式里啟動 iimage 這個 minor mode。

iimage-mode目前只能顯示以文件方式鏈接的圖片。

混排 超鏈接也是組織內容的一種非常有效的方式。Org 支持多種超鏈接。對於符合要求的圖片鏈接,可以形成圖文混排。

2.4 創建鏈接

對於符合鏈接規則的內容,org-mode會自動將其視為鏈接,包括括文件、網頁、郵箱、新聞組、BBDB 數據庫項、IRC 會話和記錄等。下面是一些例子:

http://www.astro.uva.nl/~dominik            on the web
file:/home/dominik/images/jupiter.jpg       file, absolute path
/home/dominik/images/jupiter.jpg            same as above
file:papers/last.pdf                        file, relative path
file:projects.org                           another Org file
docview:papers/last.pdf::NNN                open file in doc-view mode at page NNN
id:B7423F4D-2E8A-471B-8810-C40F074717E9     Link to heading by ID
news:comp.emacs                             Usenet link
mailto:adent@galaxy.net                     Mail link
vm:folder                                   VM folder link
vm:folder#id                                VM message link
wl:folder#id                                WANDERLUST message link
mhe:folder#id                               MH-E message link
rmail:folder#id                             RMAIL message link
gnus:group#id                               Gnus article link
bbdb:R.*Stallman                            BBDB link (with regexp)
irc:/irc.com/#emacs/bob                     IRC link
info:org:External%20links                   Info node link (with encoded space)

對於文件鏈接,可以用::后面增加定位符的方式鏈接到文件的特定位置。定位符可以是行號或搜索選項。如:

file:~/code/main.c::255                     進入到 255 行
file:~/xx.org::My Target                    找到目標‘<<My Target>>’
file:~/xx.org/::#my-custom-id               查找自定義 id 的項

除了上述的自動鏈接外,還可以顯示指定鏈接,采用如下格式:

[[link][description]]
[[link]]

顯示指定的鏈接可以不顯示原始的URL而是顯示對該鏈接的描述。 這種方式可以用相對路徑鏈接本地文件。

對於顯示指定的鏈接,即可以手工輸入,也可以用org-mode提供的快捷鍵進行編輯:

 
快捷鍵 命令 說明
C-c l   保存鏈接
C-c C-l org-insert-link 創建或修改鏈接,可以引用已保存的鏈接
C-c C-o org-open-at-point 打開鏈接
 
C-c %   記錄內部鏈接地址
C-c &   跳轉到已記錄的內部鏈接

2.5 內部鏈接

前面的例子都是外部鏈接,Org-mode還支持內部鏈接:

定義錨點 #<<my-anchor>>
[[my-anchor][內部鏈接]]

腳注可以看作是一種特殊的內部鏈接,但是要求具有"fn:"前綴:

添加腳注鏈接 [[fn:footprint1][腳注1]]
定義腳注 [fn:footprint1]

2.6 顯示圖片

盡管不看重"所見即所得",但有時候能夠看到圖文混排的內容還是很有必要的。通過iimage這個minor mode,可以在Org-mode中顯示圖片。

下載 iimage.el 文件扔到 Emacs 的目錄里,然后在 .emacs 里添加下面的代碼:

;; iimage mode
(autoload 'iimage-mode "iimage" "Support Inline image minor mode." t)
(autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t)

然后就可以用命令

M-x iimage-mode RET

在當前模式里啟動 iimage 這個 minor mode。

iimage-mode目前只能顯示以文件方式鏈接的圖片。

3 輕量級標記語言

前面的大綱和超鏈接都是使用標記來定義的。實際上,Org現在已經成為一種專門的輕量級標記語言,與Markdown、reStructedText、Textile、RDoc、MediaWiki等並列。

相對於重量級標記語言(如html, xml),輕量級標記語言的語法簡單,書寫容易。即使不經過渲染,也可以很容易閱讀。用途越來越廣泛。 比如,gitHub的README文檔除了支持純文本外,還支持豐富的輕量級標記語言,其中就包括Org。

關於這些語言的對比,可以參考這里 。下面來看一下Org還支持哪些標記。

3.1 字體

*粗體*
/斜體/
+刪除線+
_下划線_
下標: H_2 O
上標: E=mc^2
等寬字:  =git=  或者 ~git~

3.2 表格

Org 能夠很容易地處理 ASCII 文本表格。任何以‘|’為首個非空字符的行都會被認為是表格的一部分。’|‘也是列分隔符。一個表格是下面的樣子:

| Name  | Pone | Age |
|-------+------+-----|
| Peter | 1234 | 17  |
| Anna  | 4321 | 25  |

你可能認為要錄入這樣的表格很繁瑣,實際上你只需要輸入表頭“|Name|Pone|Age”之后,按C-c RET,就可以生成整個表格的結構。類似的快捷鍵還有很多:

3.2.1 創建和轉換表格
 
快捷鍵 命令 說明
C-c 豎線   創建或轉換成表格
3.2.2 調整和區域移動
 
快捷鍵 命令 說明
C-c C-c   調整表格,不移動光標
TAB   移動到下一區域,必要時新建一行
S-TAB   移動到上一區域
RET   移動到下一行,必要時新建一行
3.2.3 編輯行和列
 
快捷鍵 命令 說明
M-LEFT/RIGHT   移動列
M-UP/DOWN   移動行
M-S-LEFT/RIGHT   刪除/插入列
M-S-UP/DOWN   刪除/插入行
C-c -   添加水平分割線
C-c RET   添加水平分割線並跳到下一行
C-c ^   根據當前列排序,可以選擇排序方式

3.3 段落

對於單個回車換行的文本,認為其屬於同一個段落。在導出的時候將會轉化為不換行的同一段。如果要新起一個段落,需要留出一個空行。 這點與MediaWiki類似。

3.4 列表

Org 能夠識別有序列表、無序列表和描述列表。

  • 無序列表項以‘-’、‘+’或者‘*‘開頭。
  • 有序列表項以‘1.’或者‘1)’開頭。
  • 描述列表用‘::’將項和描述分開。
  • 有序列表和無序列表都以縮進表示層級。只要對齊縮進,不管是換行還是分塊都認為是處於當前列表項。

同一列表中的項的第一行必須縮進相同程度。當下一行的縮進與列表項的的開頭的符號或者數字相同或者更小時,這一項就結束了。當所有的項都關上時,或者后面有兩個空行 時,列表就結束了。例如:

  My favorite scenes are (in this order)
  1. The attack of the Rohirrim
  2. Eowyn's fight with the witch king
      + this was already my favorite scene in the book
      + I really like Miranda Otto.
  Important actors in this film are:
  - Elijah Wood :: He plays Frodo
  - Sean Austin :: He plays Sam, Frodo's friend.

將顯示為:

My favorite scenes are (in this order)

  1. The attack of the Rohirrim
  2. Eowyn's fight with the witch king
    • this was already my favorite scene in the book
    • I really like Miranda Otto.

Important actors in this film are:

Elijah Wood
He plays Frodo
Sean Austin
He plays Sam, Frodo's friend.
3.4.1 列表操作快捷鍵

為了便利,org-mode也支持很多列表操作的快捷鍵,大部分都與大綱的快捷鍵類似:

 
快捷鍵 命令 說明
TAB   折疊列表項
M-RET   插入項
M-S-RET   插入帶復選框的項
M-S-UP/DOWN   移動列表項
M-LEFT/RIGHT   升/降級列表項,不包括子項
M-S-LEFT/RIGTH   升/降級列表項,包括子項
C-c C-c   改變復選框狀態
C-c -   更換列表標記(循環切換)

3.5 分隔線

五條短線或以上顯示為分隔線。

-----

4 標簽

 

4.1 tag的作用

對於信息的管理,有分類(category)和標簽(tag)兩種方式。這兩種方式各有特點:

通常分類是固定的,很少變化,而tag隨時可以增加。 分類通常表現為樹狀結構,比較清晰,但是樹狀結構過於簡單,不能表達復雜的信息。比如,如果有多個分類樹,處理起來就會比較麻煩。

所以,這兩種方式通常結合起來使用。比如blog系統中,通常既支持文章的分類(樹),又支持為每篇文章作tag標記。

org-mode作為最好的文檔編輯利器 ,在支持文內大綱(也是樹狀結構)的同時,還方便的支持tag功能。tag可以在多篇文檔中共用。

4.2 標記tag

在Org-mode中,可以對標題增加tag標記。標記的格式如下:

跟特留尼西特握手                    :苦差:薪水:逃不掉:

而且Org-mode的標簽自動按照大綱樹的結構繼承。即子標題自動繼承父標題的標簽。比如:

* Meeting with the French group     :work:
** Summary by Frank                 :boss:notes:
*** TODO Prepare slides for him     :action:

則最后一行標題具有 work, boss, notes, action 四個標簽。

如果希望文檔中的所有標題都具有某些標簽,只需要定義文檔元數據:

#+FILETAGS: :Peter:Boss:Secret:

如果手工輸入標簽,在標題后設置標簽,鍵入:后,M-Tab自動提供標簽的補齊。

更方便的做法是在正文部分用C-c C-q 或直接在標題上用C-c C-c創建標簽,這種方式可以列出所有預定義的標簽以便選取。

4.3 預定義tag

上面提到,除了可以輸入標簽外,還可以從預定義的標簽中進行選擇。預定義的方式有兩種:

  • 在當前文件頭部定義
    這種方式預定義的標簽只能在當前文件中使用。使用#+TAGS元數據進行標記,如:
    
        #+TAGS: { 桌面(d) 服務器(s) }  編輯器(e) 瀏覽器(f) 多媒體(m) 壓縮(z)    
    

    每項之間必須用空格分隔,可以在括號中定義一個快捷鍵;花括號里的為標簽組,只能選擇一個

    對標簽定義進行修改后,要在標簽定義的位置按 C-c C-c 刷新才能生效。

  • 在配置文件中定義 上面的標簽定義只能在當前文件生效,如果要在所有的.org 文件中生效,需要在 Emacs 配置文件 .emacs 中進行定義:

(setq org-tag-alist '(

                    (:startgroup . nil)
                         ("桌面" . ?d) ("服務器" . ?s)
                    (:endgroup . nil)
                    ("編輯器" . ?e)
                    ("瀏覽器" . ?f) 
                    ("多媒體" . ?m)
                    ))    

默認情況下,org會動態維護一個Tag列表,即當前輸入的標簽若不在列表中,則自動加入列表以供下次補齊使用。

為了使這幾種情況(默認列表、文件預設tags,全局預設tags)同時生效,需要在文件中增加一個空的TAGS定義:

#+TAGS:

4.4 按tag搜索

使用標簽可以更好的管理內容。org-mode提供了以下功能:

 
KEYS COMMENT
C-c \ 按tag搜索標題
C-c / m 搜索並按樹狀結構顯示
C-c a m 按標簽搜索多個文件(需要將文件加入全局agenda)

可以使用邏輯表達式限制條件,更准確靈活的搜索

+     和      a+b     同時有這兩個標簽
-     排除    a-b     有 a 但沒有 b
|     或      a|b     有 a 或者有 b
&     和      a&b     同時有 a 和 b,可以用“+”替代

在查詢視圖中 C-c C-c 退出

5 導出和發布

更多: http://orgmode.org/manual/Exporting.html

Org-mode可以完美的編輯,但是最終文檔可能需要發布成其他的格式。 Org-Mode 支持多種文檔的輸出,包括:

  • 文本
  • 網頁
  • PDF(需要 Latex 支持)
  • XOXO
  • FreeMind/Xmind
  • Docbook
  • iCalendar(蘋果 iCal 文件)
  • ……

5.1 准備工作

為了更好的發布文檔,還需要做一些准備工作。主要是為文檔添加一些”元數據“,使得發布的時候能更好地識別文檔的內容。

5.1.1 文檔元數據

具體包括:

#+TITLE:       the title to be shown (default is the buffer name)
#+AUTHOR:      the author (default taken from user-full-name)
#+DATE:        a date, an Org timestamp1, or a format string for format-time-string
#+EMAIL:       his/her email address (default from user-mail-address)
#+DESCRIPTION: the page description, e.g. for the XHTML meta tag
#+KEYWORDS:    the page keywords, e.g. for the XHTML meta tag
#+LANGUAGE:    language for HTML, e.g. ‘en’ (org-export-default-language)
#+TEXT:        Some descriptive text to be inserted at the beginning.
#+TEXT:        Several lines may be given.
#+OPTIONS:     H:2 num:t toc:t \n:nil @:t ::t |:t ^:t f:t TeX:t ...
#+BIND:        lisp-var lisp-val, e.g.: org-export-latex-low-levels itemize
               You need to confirm using these, or configure org-export-allow-BIND
#+LINK_UP:     the ``up'' link of an exported page
#+LINK_HOME:   the ``home'' link of an exported page
#+LATEX_HEADER: extra line(s) for the LaTeX header, like \usepackage{xyz}
#+EXPORT_SELECT_TAGS:   Tags that select a tree for export
#+EXPORT_EXCLUDE_TAGS:  Tags that exclude a tree from export
#+XSLT:        the XSLT stylesheet used by DocBook exporter to generate FO file

其中#+OPTIONS是復合的選項,包括:

H:         set the number of headline levels for export
num:       turn on/off section-numbers
toc:       turn on/off table of contents, or set level limit (integer)
\n:        turn on/off line-break-preservation (DOES NOT WORK)
@:         turn on/off quoted HTML tags
::         turn on/off fixed-width sections
|:         turn on/off tables
^:         turn on/off TeX-like syntax for sub- and superscripts.  If
           you write "^:{}", a_{b} will be interpreted, but
           the simple a_b will be left as it is.
-:         turn on/off conversion of special strings.
f:         turn on/off footnotes like this[1].
todo:      turn on/off inclusion of TODO keywords into exported text
tasks:     turn on/off inclusion of tasks (TODO items), can be nil to remove
           all tasks, todo to remove DONE tasks, or list of kwds to keep
pri:       turn on/off priority cookies
tags:      turn on/off inclusion of tags, may also be not-in-toc
<:         turn on/off inclusion of any time/date stamps like DEADLINES
*:         turn on/off emphasized text (bold, italic, underlined)
TeX:       turn on/off simple TeX macros in plain text
LaTeX:     configure export of LaTeX fragments.  Default auto
skip:      turn on/off skipping the text before the first heading
author:    turn on/off inclusion of author name/email into exported file
email:     turn on/off inclusion of author email into exported file
creator:   turn on/off inclusion of creator info into exported file
timestamp: turn on/off inclusion creation time into exported file
d:         turn on/off inclusion of drawers

這些元數據可以根據需要設置。建議放在文檔的開頭部分。如,本文采用的元數據如下:

#+TITLE: org-mode: 最好的文檔編輯利器,沒有之一
#+AUTHOR:Holbrook Wong
#+EMAIL: wanghaikuo@gmail.com
#+KEYWORDS: emacs, org-mode
#+OPTIONS: H:4 toc:t 
5.1.2 內容元數據

通常在行首以“#+”開頭,可以有多種用途。

  • 分行區塊
    默認內容不換行,需要留出空行才能換行。定義了分行的區塊可以實現普通換行:
    #+BEGIN_VERSE
     Great clouds overhead
     Tiny black birds rise and fall
     Snow covers Emacs
         -- AlexSchroeder
    #+END_VERSE
    
  • 縮進區塊
    通常用於引用,與默認格式相比左右都會留出縮進:
    #+BEGIN_QUOTE
      縮進區塊
    #+END_QUOTE
    
  • 居中區塊
    #+BEGIN_CENTER
    Everything should be made as simple as possible, \\
    but not any simpler
    #+END_CENTER
    
  • 代碼區塊
    #+BEGIN_SRC ruby
      require 'redcarpet'
      md = Redcarpet.new("Hello, world.")
      puts md.to_html
    #+END_SRC
    
  • 例子
    : 單行的例子以冒號開頭
    
    #+BEGIN_EXAMPLE
     多行的例子
     使用區塊
    #+END_EXAMPLE
    
  • 注釋
    以‘#‘開頭的行被看作注釋,不會被導出

    區塊注釋采用如下寫法:

    #+BEGIN_COMMENT
      塊注釋
      ...
     #+END_COMMENT
    
  • 表格與圖片
    對於表格和圖片,可以在前面增加標題和標簽的說明,以方便交叉引用。

    比如在表格的前面添加:

    #+CAPTION: This is the caption for the next table (or link)
    #+LABEL: tbl:table1
    

    則在需要的地方可以通過

    \ref{table1}
    

    來引用該表格。

5.1.3 嵌入Html

對於導出html以及發布,嵌入html代碼就很有用。比如下面的例子適用於格式化為cnblogs的代碼塊:

#+BEGIN_HTML
  <div class="cnblogs_Highlighter">
  <pre class="brush:cpp">
  int main()
  {
    return 0;
  }
  </pre>
  </div>
#+END_HTML

相當於在cnblogs的網頁編輯器中插入"c++"代碼。

5.1.4 包含文件

當導出文檔時,你可以包含其他文件中的內容。比如,想包含你的“.emacs”文件,你可以用:

     #+INCLUDE: "~/.emacs" src emacs-lisp

可選的第二個第三個參數是組織方式(例如,“quote”,“example”,或者“src”),如果是 “src”,語言用來格式化內容。組織方式是可選的,如果不給出,文本會被當作 Org 模式的正常處理。用 C-c ,可以訪問包含的文件。

5.1.5 嵌入 LaTex

對於需要包含數學符號和特殊方程的科學筆記,Org 模式支持嵌入 LaTeX 代碼到文件中。你可以直接使用類 TeX 的宏來輸入特殊符號,輸入方程,或者整個 LaTeX 環境。

Angles are written as Greek letters \alpha, \beta and \gamma. The mass if
the sun is M_sun = 1.989 x 10^30 kg. The radius of the sun is R_{sun} =
6.96 x 10^8 m. If $a^2=b$ and $b=2$, then the solution must be either
$a=+\sqrt{2}$ or $a=-\sqrt{2}$.
\begin{equation}
x=\sqrt{b}
\end{equation}

特殊設置之后,導出 HTML 時 LaTeX 代碼片斷會生成圖片並包含進來。

5.2 導出

做好准備工作后,就可以導出了。使用命令:

C-c C-e

然后選擇相應的格式,就可以導出對應的文件了。

5.3 發布

Org 包含一個發布管理系統,可以配置一個由相互鏈接的 Org 文件組成的工程項目的自動向 HTML 轉換。你也可以設置 Org,將導出的 HTML 頁面和相應的附件如圖片,源代 碼文件等自動上傳到服務器。

下面是一個例子:

(setq org-publish-project-alist
     '(("org"
        :base-directory "~/org/"
        :publishing-directory "~/public_html"
        :section-numbers nil
        :table-of-contents nil
        :style "<link rel=\"stylesheet\"
               href=\"../other/mystyle.css\"
               type=\"text/css\"/>")))

發布相關的命令:

 
命令 說明
C-c C-e C 提示指明一個項目,將所有的文件發布
C-c C-e P 發布包含當前文件的項目
C-c C-e F 只發布當前文件
C-c C-e E 發布所有項目

Org 用時間戳來查看文件是否改變。上面的命令只發布修改過的文件。你可以給它們加上前綴來強制重新發布所有的文件。


Date: 2012-04-15 17:59:22 CST

Author: Holbrook Wong

Org version 7.8.08 with Emacs version 23


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM