Org-mode 簡明手冊

Org-mode 簡明手冊

1 簡介1

 

1.1 序

Org 是一個用文本方式來快速高效地作筆記、維持待辦事項和作項目計劃的模式。它是一個創做發佈系統。css

這個文檔是 Org-mode 手冊的一個壓縮版本。包含了全部的基本功能和命令,以及一些重要的定製提示。本文檔寫給不想閱讀200多頁手冊的新手。html

1.2 安裝

重要: 若是你用的是 Emacs 或者 XEmacs 包裏的 Org 版本,請跳過本節,直接閱讀 1.3 節。node

若是你是從網站上下載的 Org 版本,不管是 zip 包仍是 tar 文件或者是 Git 文件,最好在分發包目錄裏直接來設置它。把 lisp 子目錄加到 Emacs 的加載路徑裏,能夠把下面兩句加在 「.emacs」 文件裏:python

(setq load-path (cons "~/path/to/orgdir/lisp" load-path))
(setq load-path (cons "~/path/to/orgdir/contrib/lisp" load-path))

爲了提升速度能夠用下面的 shell 命令將 Lisp 文件編譯一下:web

make

再把下面一行加到 .emacs 文件裏。它可使文件中的函數自動加載,而不是啓動 Org 模式時當即加載。正則表達式

(require 'org-install)

1.3 激活

把下面幾行加到 .emacs 文件裏。後三行是爲命令定義全局快捷鍵――請改爲適合你本身的。shell

;; The following lines are always needed. Choose your own keys.
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(add-hook 'org-mode-hook 'turn-on-font-lock) ; not needed when global-font-lock-mode is on
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)

設置以後,打開 .org 擴展的文件會自動進入 org 模式。數據庫

1.4 反饋

若是你發現了問題,或者有問題評論或新想法,能夠給Org的郵件列表 emacs-orgmode@gnu.org 發郵件。瞭解更多信息或者提交 bug,參見手冊。後端

2 文檔結構

Org是基於Outline模式的,它提供了更靈活的編輯結構文件的命令。瀏覽器

2.1 大綱

Org 是在大綱模式之上實現的。大綱模式可讓咱們用層次結構來組織文檔,這(至少對我來講)是筆記和想法的最好實現方式。這種結構能夠摺疊(隱藏)文檔的一部分而只顯示文檔的大概結構或者只顯示咱們正在處理的部分。Org 大大簡化了大綱模式的使用,它把大綱模式的整個顯示/隱藏功能整合到了一個命令中:org-cycle,這個命令綁定到了TAB鍵上。

2.2 標題

標題定義了大綱樹的結構。它以處於一行左邊緣的一個或多個星號開頭。例如:

* Top level headline
** Second level
*** 3rd level
    some text
*** 3rd level
    more text

* Another top level headline

若是你不喜歡太多的星號,能夠以空格後加一個星號做爲標題的開頭。查看 15.2 節 [Clean view],那裏有設置方法。

2.3 視圖循環

大綱模式能夠隱藏緩衝區裏的部分正文。Org 用綁定到 TAB 和 S-TAB 上的兩個全命令來改變視圖。

 
TAB 子樹循環:當加上一個前綴參數時(C-u TAB),在下面的狀態中改變當前子樹的視圖
  FOLDED -> CHILDREN -> SUBTREE
  當加上shift鍵時會觸發全局的視圖循環。
S-TAB和C-u TAB 全局循環:使整個緩衝區在下列狀態中循環
  OVERVIEW -> CONTENTS -> SHOWALL
C-u C-u C-u TAB 顯示所有,包括drawers。

當 Emacs 剛打開文件時,全局的狀態是 OVERVIEW,也即只有頂層的標題可見。這能夠經過變量 org-startup-folded 來設置。也能夠經過 startup 關鍵字設置只對單個文件有效:

#+STARTUP: content

2.4 移動

下面的命令能夠跳轉到緩衝區其餘的標題。

 
C-c C-n 下個標題
C-c C-p 上個標題
C-c C-f 下個同級的標題
C-c C-b 上個同級的標題
C-c C-u 回到上層標題

2.5 結構編輯

 
M-RET 插入一個同級標題。若是光標在文本列表中,建立一個新的項(見 2.7 節 [Plain lists])。若是處於一行的中間,這一行會被分開,後面的一部分紅爲新的標題。
M-S-RET 插入一個和當前標題同級的 TODO 項
TAB(新的空的條目中) 若是新的條目中尚未文字,TAB 會調整到合適的級別。
M-LEFT/RIGHT 將當前的標題提高/下降一個等級。
M-S-LEFT/RIGHT 將當前子提高/下降一個等級。
M-S-UP/DOWN 將子樹上/下移(和前/後個子樹交換)。
C-c C-w 將條目或區域傳送到另外一個文件中。見 9.2 節 [Refiling notes]。
C-x n s/w 將緩衝區視圖侷限到當前子樹中/再次放寬視圖

若是有活動區域(暫時標記狀態),提高和下降功能將會對區域中的全部標題起做用。

2.6 稀疏樹

Org 模式的一個重要的功能是能根據大綱樹中選擇的信息構造出稀疏的樹,這樣文檔就能夠儘量地摺疊,可是選擇的信息和它對應的標題會顯示出來。試下就知道它是怎樣工做的了。

Org 模式有幾個命令能夠建立這種樹,這些命令均可以經過調度器來使用:

 
C-c / 它會提示再輸入一個字符來選擇稀疏樹的建立命令。
C-c / r 觸發後,會提示輸入匹配串,而且將全部匹配的項顯示成稀疏樹。全部的匹配項都會高亮顯示;按 C-c C-c 取消高亮。

其餘的基於 TODO 關鍵字、標籤或屬性來選擇標題的稀疏樹命令,咱們會在本手冊的後面討論。

2.7 文本列表

在大綱樹的一項中,自定義格式的列表能夠提供更多的組織結構,也使咱們能夠獲得一個復先框列表(見 5.6 節[復先框])。Org 模式能夠處理這種列表,而且 HTML 導出器(見12章)也支持這種格式。

Org 可以識別有序列表、無序列表和描述列表。

  • 無序列表項以‘-’、‘+’或者‘*‘開頭。
  • 有序列表項以‘1.’、‘1)’或者開頭。
  • 描述列表用‘::’將項和描述分開。

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

** Lord of the Rings
   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.

當光標位於一項的第一行時(帶有項標誌符號的行),下面的命令將會做用於該項:

 
TAB 摺疊項
M-RET 在當前級別插入一個項,有前綴時是強制新建一個標題
M-S-RET 插入一個帶有復先框的項(見 2.5 節[復先框])
M-S-UP/DOWN 將當前項和它的子項向上/下移動(和相同的縮進的前/後一個項交換位置)。若是列表是有序的,數字會自動改變
M-LEFT/M-RIGHT 提高/下降項的縮進,不包含子項
M-S-LEFT/RIGHT 提高/下降項的縮進,包含子項
C-c C-c 若是項中有復先框,就觸發改變其狀態。而且自動保持本項的符號與縮進在列表中的一致性
C-c - 循環改變將當前列表的項標誌符號

2.8 腳註

腳註就是以腳註定義符號開頭的一段話,腳註定義符號是將腳註名稱放在一個方括號裏造成的,要求放在第0列,不能有縮進。而引用就是在正文中將腳註名稱用方括號括起來。例如:

The Org homepage[fn:1] now looks a lot better than it used to.
...
[fn:1] The link is: http://orgmode.org

用下面的命令來處理腳註:

 
C-c C-x f 這是一個移動命令。當光標處理引用處時,跳轉到它的定義;當光標處理定義處時,跳轉到第一個引用處。其餘狀況下,新建一個腳註。當有前綴時,會提供一個菜單供選擇操做,其中包括從新給腳註編號。
C-c C-c 在定義和引用之間跳轉

擴展閱讀:
手冊第 2 章
Sacha Chua's tutorial

3 表格

Org 提供了快速易用的表格編輯功能。經過調用 Emacs 內嵌的 ‘calc’包(對於 Emacs 的計算器能夠查看 Emacs Calculator 手冊)它支持相似於製表軟件的計算操做。

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

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

當你在表格內部輸入 TAB、RET 或者 C-c C-c 時表格都會自動調整。TAB 會進入下一個區域(RET 進入下一行)而且建立一個新的行。表格的縮進程度能夠在第一行設定。以’|-’開頭的一行會做爲一個水平分隔行,當它下次調整排列時會將‘-’擴展至填充整行。因此想要建上面的那個表格,只需鍵入:

|Name|Phone|Age|
|-

而後 TAB 排列表格。還有一個更快的方法就是鍵入|Name|Phone|Age,再 C-c RET。

在表格區域中輸入文本時,DEL、BACKSPACE 和全部其餘的字符會以特殊的方式處理,防止影響到其餘的區域。當按 TAB、S-TAB 或者 RET 將光標移動到其餘區域時,區域中會自動填充一些空格。

建立和轉換

C-c | 將活動區域(選中區域)轉換成一個表。若是第一行至少有一個 TAB 字符,就用 TAB 劃份內容;若是第一行都有逗號,就分逗號劃份內容;不然就用空白符來劃分區域。若是當前沒有活動區域就會創建一個空的 Org 表格。其實用|Name|Phone|Age C-c RET 來建表會更簡單一點。

調整和區域移動

 
C-c C-c 調整表格,不移動光標
TAB 調整表格,將光標移到下一個區域,必要時新建一行
S-TAB 調整表格,將光標移到上一個區域
RET 調整表格,將光標移到下一行,必要時會新建一行

編輯行和列

 
M-LEFT/RIGHT 左/右移當前列
M-S-LEFT 刪除當前行
M-S-RIGHT 在光標位置左邊添加一列
M-UP/DOWN 上/下移當前行
M-S-UP 刪除當前行
M-S-DOWN 在當前行上面添加一行。若是有前綴,則在下面添加一行
C-c - 在當前行下面添加一個水平線。若是帶前綴,則在上面添加一行水平線
C-c RET 在當前行下面添加一個水平線。並將光標移動到下一行
C-c ^ 將表排序。當前位置所在的列做爲排序的依據。排序在距當前位置最近的兩個水平線之間的行(或者整個表)中進行

擴展閱讀:
手冊第 3 章
Bastien’s table tutorial
Bastien’s spreadsheet tutorial
Eric’s plotting tutoria

4 超連接

就像 HTML 同樣,Org 也提供了文件的內部連接,以及到其餘文件、新聞組、電子郵件的外部連接等連接格式。

4.1 連接格式

Org 可以識別 URL 格式的文本並將它們處理成可點擊的連接。一般連接格式是這樣的:

[[link][description]]  或者  [[link]]

連接輸入一旦完成(全部的括號都匹配),Org 就會改變它的視圖。這裏會看到 」description「 和 」link「 ,而不是

[[link][descriptoin]]

[[link]]。

要想編輯連接,能夠光標置於連接上並鍵入 C-c C-l。

4.2 內部連接

若是一個連接地址並非 URL 的形式,就會做爲當前文件內部連接來處理。最重要的一個例子是

[[#my-custom-id]]

它會連接到 CUSTOM_ID 屬性是 「my-custom-id」 的項。

相似

[[My Target]]

[[My Target][Find my target]]

的連接,點擊後本文件中查找對應的目標 「<<My Target>>」 。

4.3 外部連接

Org 支持的連接格式包括文件、網頁、新聞組、BBDB 數據庫項、IRC 會話和記錄。外部連接是 URL 格式的定位器。以識別符開頭,後面跟着一個冒號,冒號後面不能有空格。下面是一些例子:

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)

連接的括號應當是閉合的。當連接含有描述文字是顯示描述文字而不是連接地址(見 4.1 節[連接格式]),例如:

[[http:www.gnu.org/software/emacs/][GNU Emacs]]

若是描述信息是一個文件名或者是指向圖片的 URL。HTML 導出(見 12.4 節[HTML 導出])時會將圖片內聯成一個能夠點擊的按鈕。若是沒有描述信息且連接指向一個圖片,那麼圖片就會嵌入到導出的 HTML 文件中。

4.4 使用連接

Org 提供瞭如下方法來建立和使用連接。

 
C-c l 在當前位置保存一個連接。這是一個全局命令(你能夠設置本身的快捷鍵),能夠在任何類型的緩衝區中使用。連接保存下來以便之後插入 Org 文件中(見下面)
C-c C-l 插入一個連接。它會讓你輸入,你能夠輸入一個連接,也可心用上/下鍵來獲取保存的連接。它還會讓你輸入描述信息。
C-c C-l(光標在連接上) 當光標處於連接上時,你能夠修改連接
C-c C-o 或者 mouse-1 或者 mouse-2 打開連接
C-c & 跳回到一個已記錄的地址。用 C-c % 能夠將地址記錄下來,內部連接後面的命令也會自動將地址記錄下來。使用這個命令屢次能夠一直往前定位。

4.5 目標連接

文件連接能夠包含一些其餘信息使得進入連接時能夠到達特定的位置。好比雙冒號以後的一個行號或者搜索選項。

下面是一些包含搜索定位功能的連接例子以及其說明:

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

擴展閱讀:
手冊第四章

5 待辦事項

Org 模式並不用一個單獨的文件來維持 TODO 列表2。它是一些筆記的集合體,由於 TODO 列表是在你記錄筆記的過程當中逐漸造成的。你 Org 模式下能夠很容易地將樹中的一項標記爲一個 TODO 的項。用這種方式,信息內容不會冗餘加倍,並且能夠顯示 TODO 項的上下文環境。

固然,這種處理待辦事項的方式會將它們分散於各個筆記文件中。Org 模式提供了一些方法使咱們能夠把它們看做一個總體來處理。

5.1 使用TODO狀態

當標題以 TODO 開關時它就成爲了一個 TODO 項,例如:

***TODO Write letter to Sam Fortune

下面是一些使用 TODO 項的經常使用命令:

 
C-c C-t 將當前項的狀態在(unmarked)->TODO->DONE 之間循環切換,一樣的切換也能夠在時間軸(timeline) 和議程( agenda) 的緩衝區(buffer)中用 t 鍵「遠程」進行。(見 2.6 節[稀疏樹])
S-RIGHT/LEFT 選擇下一個/上一個 TODO 狀態,與上面的循環方式相同。
C-c / t 在稀疏樹中顯示 TODO 項。將 buffer 摺疊,可是會顯示 TODO 項和它們所在的層次的標題。
C-c a t 顯示全局 TODO 列表。從全部的議程文件中收集 TODO 項到一個緩衝區中。詳見 10.3.2 節。
S-M-RET 在當前項下插入一個新的 TODO 項。

改變 TODO 的狀態會觸發標籤改變。查看選項 org-todo-state-tags-triggers 的描述得到更多信息。

5.2 多狀態工做流程

你能夠用 TODO 關鍵字來定義不一樣的狀態,用以處理項,好比:

(setq org-todo-keywords
      '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))

豎直線將 TODO 關鍵字(還須要進一步的動做)和 DONE 狀態(不須要進一步的動做)分隔開。若是你不給出豎直線,最後一個狀態會做爲 DONE 狀態。設置以後,C-c C-t 就會將狀態從 TODO 轉換到 FEEDBACK,再轉換到 VERIFY,最後到 DONE 和 DELEGATED。

有時你可能但願同時使用幾個不一樣的 TODO 狀態集合。例如,你可能想要一個基本的 TODO/DONE,以及一個修改 bug 的工做流程和一個隔開的狀態來表示取消的項目(既仍是 DONE,也不須要進一步的動做),你能夠這樣設置:

(setq org-todo-keywords
      '((sequence "TODO(t)" "|" "DONE(d)")
        (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
        (sequence "|" "CANCELED(c)")))

關鍵字應該各不相同,這樣對於一個選項 Org 才知道該用哪一個狀態序列(集合)。例子中也給出了快速使用一個關鍵字的方法,就是在關鍵字後面括號中給出快捷字母——當用 C-c C-t時,會詢問,讓你輸入一個字母。

要定義只在一個文件中有效的 TODO 關鍵字,能夠在文件中任意地方給出下面的文本:

#+TODO: TODO(t) | DONE(d)
#+TODO: REPORT(r) BUG(b) KNOWNCAUSE(k) | FIXED(f)
#+TODO: | CANCELED(c)

當改變這些行中的一行後,光標停留在改變行上,用 C-c C-c 讓改變生效。

5.3 進度日誌

當你改變一個 TODO 狀態爲 DONE 時,或者當你每次改變一個 TODO 項的狀態時,Org 都會自動記錄時間戳或者做一個記錄。這是高度可配置的。能夠基於每個關鍵字進入設置,而且能夠定位到一個文件甚至子樹。怎樣記錄一個任務的工做時間,見 8.4 節。

完成的項目

最基本的日誌功能是跟蹤一個特定項目的完成。這能夠這樣實現:3

(setq org-log-done 'time)

這時當你將一個項目從一個 TODO(未完成)狀態改變爲一個完成狀態時,標題下面就會插入一行 「CLOSED:[timestamp]」。若是你想和時間戳一塊兒做一個記錄,用:4

(setq org-log-done 'note)

這時會提示你輸入一個記錄(note),並將它保存在標題爲「Closing Note」項目之下。

跟蹤TODO狀態變化

你可能想跟蹤 TODO 狀態的變化。能夠只記錄一個時間戳,也能夠爲變化做一個帶時間戳的記錄。記錄會被插入到標題以後造成列表。當有不少記錄以後,你可能但願將記錄取出放到抽屜裏。經過定製變量 org-log-into-drawer 能夠實現這個功能。 對於狀態記錄,Org 能夠實現基於每一個狀態關鍵字的設置。實現方法是在每一個後的括號中指定「!」(記錄時間戳)或「@」(做一個記錄)。例如:

#+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)

將會設置 TODO 關鍵字和快速訪問字母,以及當一個項目設爲 DONE 時,會記錄時間戳,當狀態變爲 WAIT 或 CANCELED 時,會做一個記錄。這個語法也適用於變量 org-todo-keywords。

5.4 優先級

若是你普遍地使用 Org 模式,這樣你就會有大量的 TODO 項。給它們設定優先級就頗有必要。能夠在 TODO 項的標題中加入一些標記(cookie)來設置它們的優先級,像這樣:

*** TODO [#A] Write letter to Sam Fortune

Org模式支持三個優先級別:’A‘、’B‘和’C‘。’A‘是最高級別,如不指定,’B‘是默認的。優先級只在議程中有用。

 
C-c , 設置當前標題的優先級。按’‘’‘’‘選擇一個級別,或者SPC刪除標記(cookie)。
S-UP  
S-Down 增長/減小當前標題的優先級。

5.5 任務細分

不少時候將一個大的任務分紅幾個的易於完成的小任務是明智的。你能夠經過在TODO項目下新建一個大綱樹,並在子樹上標記子任務來實現這個功能。爲了能對已經完成的任務有個大體的瞭解,你能夠在標題的任何地方插入‘[/]’或者‘[%]’。當每一個子任務的狀態變化時,或者當你在標記上按 C-c C-c時,這些標記狀態也會隨之更新。例如:

* Organize Party [33%]
** TODO Call people [1/2]
*** TODO Peter
*** DONE Sarah
** TODO Buy food
** DONE Talk to neighbor

5.6 複選框

當純文本中的項以‘[]’開頭時,就會變成一個複選框。複選框不會包含在全局 TODO 列表中,因此它們很適合地將一個任務劃分紅幾個簡單的步驟。下面是一個複選框的例子:

* TODO Organize party [1/3]
  - [-] call people [1/2]
    - [ ] Peter
    - [X] Sarah
  - [X] order food
  - [ ] think about what music to play

複選框是分層工做的。因此若是一個複選框項目若是還有子複選框,觸發子複選框將會使該複選框變化以反映出一個、多個仍是沒有子複選框被選中。

下面是處理複選框的命令:

 
C-c C-c 觸發複選框的狀態或者(加上前綴)觸發複選框的的存在狀態。
M-S-RET 增長一個帶有複選框的項。這隻在光標處於純文本列表項(見 2.7 節)中才起使用。

擴展閱讀:
手冊第5章
David O’Toole’s introductory tutorial
Charles Cave’s GTD setup

6 標籤

要爲交叉相關的信息提供標籤和上下文,一個不錯的方法是給標題分配標籤。Org 模式可以普遍地支持標籤。

每個標題都能包含多個標籤,它們位於標題的後面。標籤能夠包含字母,數字, ‘_’ 和 ‘@’ 。標籤的前面和後面都應該有一個冒號,例如,「:work:」。能夠指定多個標籤,就像「:work:urgent:」。標籤默認是粗體,並和標題具備相同的顏色。

6.1 標籤繼承

標籤具備大綱樹的繼承結構。若是一個標題具備某個標籤,它的全部子標題也會繼承這個標籤。例如,在列表

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

中,儘管沒有明確標出,最後一個標題會有標籤「:work:」,「:boss:」,「:note:」,和「:action」。你也能夠設定一個標籤讓全部的標題都繼承,就好像標籤在包含整個文件的第零級標題中指定了同樣。用下面的方法5

#+FILETAGS: :Peter:Boss:Secret:

6.2 設置標籤

在標題後能夠很容易地輸入標籤。在冒號以後,M-TAB 能夠補全標籤。也有一些專門的命令用於輸入標籤:

 
C-c C-q 爲當前標題輸入標籤。Org 模式既支持補全,也支持單鍵接口來設置標籤,見下文。回車以後,標籤會被插入,並放到第 org-tags-column 列。若是用前綴 C-u,會把當前緩衝區中的全部標籤都對齊到那一列,這看起來很酷。
C-c C-c 當光標處於標題上時,這個命令同C-c C-q。

Org 支持基於一個標籤列表來插入標籤。默認狀況這個列表是動態構建的,包含了當前緩衝區中使用過的全部標籤。你也能夠經過變量 org-tag-alist 在全局設定一個標籤的硬列表(hard list)。另外,對於某個特定文件你也能夠用下面這幾行設置一個默認列表:

#+TAGS: @work @home @tennisclub
#+TAGS: laptop car pc sailboat

默認 Org 模式用一個迷你緩衝區補全設施來輸入標籤。另外,它也實現了一個更快速,稱爲 快速標籤選擇 ( fast tag selection )的標籤選擇方法。這使得你只用按一次鍵就能夠選擇或者取消一個標籤。爲了使它能很好地工做,須要爲經常使用的標籤賦惟一的值。你能夠在你的「.emacs」文件中經過設置變量 org-tag-alist 做全局設定。例如,若是你須要在不一樣的文件中常常要給條目添加標籤「:@home:」,這時你就能夠像這樣設置:

(setq org-tag-alist '(("@work" . ?w) ("@home" . ?h) ("laptop" . ?l)))

若是標籤只用於當前正在處理的文件,那麼你能夠這樣設置標籤選項行:

#+TAGS: @work(w) @home(h) @tennisclub(t) laptop(l) pc(p)

6.3 標籤查找

一旦標籤體系設置好,就能夠用來收集相關聯的信息到指定列表中。

 
C-c \  
C-c / m 用匹配標籤搜索的全部標題構造一個稀疏樹。帶前綴參數C-u時,忽略全部仍是TODO行的標題。
C-c a m 用全部議程文件匹配的標籤構造一個全局列表。見第 10.3.3 節。
C-c a M 用全部議程文件匹配的標籤構造一個全局列表,但只搜索 TODO 項,並強制搜索全部子項(見變量 org-tags-match-listsublevels)。

這些命令都會提示輸入字符串,字符串支持基本的邏輯去處。像「+boss+urgent-project1」,是搜索全部的包含標籤「boss」和「urgent」但不含「project1」的項;而 「Kathy|Sally」,搜索標籤包含「Kathy」或者「Sally」和項。搜索字符串的語法很豐富,支持查找TODO關鍵字、條目級別和屬性。更詳細的介紹和例子,見第 10.3.3 節。

擴展閱讀
手冊第 6 章
Sacha Chua’s article about tagging in Org-mode

7 屬性

屬性是一些與條目關聯的鍵值對。它們位於一個名爲 PROPERTIES 的特殊抽屜中。第一個屬性都單獨一行,鍵在前(被冒號包圍),值在後:

* CD collection
** Classic
*** Goldberg Variations
    :PROPERTIES:
    :Title:    Goldberg Variations
    :Composer: J.S. Bach
    :Publisher: Deutsche Grammophon
    :NDisks:   1
    :END:

經過設置屬性 「:Xyz_ALL:」 ,你能夠爲屬性 「:Xyz:」 設置全部合法的值。這個特定的屬性是有 繼承性 的,即,若是你是在第 1 級別設置的,那麼會被應用於整個樹。當合法的值設定以後,設置對應的屬性就很容易了,而且不容易出現打字錯誤。用CD唱片集爲例,咱們能夠預約義發行商和盒中的光盤數目:

* CD collection
  :PROPERTIES:
  :NDisks_ALL: 1 2 3 4
  :Publisher_ALL: "Deutsche Grammophon" Philips EMI
  :END:

也能夠在全局設置 org-global-properties ,或者在文件級別設置:

#+PROPERTY: NDisks_ALL 1 2 3 4
 
C-c C-x p 設置一個屬性。會詢問屬性名和屬性值。
C-c C-c d 從當前項中刪除一個屬性。

要基於選擇的屬性建立稀疏樹或者特殊列表,跟標籤搜索的命令相同(見第6.3節)。搜索字符串的語法在第10.3.3節中詳述。

7.1 擴展閱讀

手冊第7章
Bastien Guerry’s column view tutorial

8 日期和時間

爲了支持工程的計劃,TODO 項能夠標記上日期和/或時間。帶有日期和時間信息的特定格式的字符串在 Org 模式中稱爲時間戳。

8.1 時間戳

時間戳是一個具備特定格式的日期(可能帶有時間和時間段)說明,例如 ~ 2005-10-01~ Tue , ~ 2003-09-16~Tue 09:39 ,或者 ~ 2003-09-16~ Tue 12:00-12:30 。 時間戳能夠出如今樹條目的標題和正文的任何地方。它能使條目只在特定的日期纔出如今議程列表中。(見第 10.3.1 節)咱們區分爲:

普通時間戳;事件;約會

一個簡單的時間戳只是給一個條目加上時間和日期。這跟在紙質的議程上寫下約會和事件是同樣的。

* Meet Peter at the movies <2006-11-01 Wed 19:15>
* Discussion on climate change <2006-11-02 Thu 20:00-22:00>

具備時間間隔的時間戳

一個時間戳能夠包含一個時間間隔,表示事件不僅在指定的時間發生,還在每隔一個特定的時間如 N 天(d)、周(w)、月(m)或者年(y)以後重複發生。下面的事件每週二在議程中顯示:

* Pick up Sam at school <2007-05-16 Wed 12:30 +1w>

日記樣式的 sexp 條目

爲了能定義更復雜的時間,Org 模式支持 Emacs 日曆/日記包(calendar/diary package)中的日記條目。例如:

* The nerd meeting on every 2nd Thursday of the month
  <%%(diary-float t 4 2)>

時間/日期段

兩個時間戳用‘–’鏈接起來就定義了一個時間段:

** Meeting in Amsterdam
   <2004-08-23 Mon>--<2004-08-26 Thu>

非激活的時間戳

跟普通時間戳同樣,可是這裏是方括號而不是尖括號。這種時間戳是未激活的,它  會讓一個條目顯示在議程中。

* Gillian comes late for the fifth time [2006-11-01 Wed]

8.2 建立時間戳

時間戳要有特定的格式,這樣才能被Org模式識別。下面的命令能夠用來正確地處理時間戳的格式。

 
C-c . 詢問日期並輸入正確的時間戳。當光標處理一個時間戳之上時,是修改這個時間戳,而不是插入一個新的。若是這個命令連用再次,就會插入一個時間段。加上前綴會附帶當前時間。
C-c ! 功能同C-c .,可是插入的是一個未激活的時間戳。
S-LEFT/RIGHT 將光標處理的時間戳改變一天。
S-UP/DOWN 改變時間戳中光標下的項。光標能夠處在年、月、日、時或者分之上。當時間戳包含一個時間段時,如 「15:30-16:30」,修改第一個時間,會自動同時修改第二個時間,以保持時間段長度不變。想修改時間段長度,能夠修改第二個時間。

當 Org 模式詢問時間/日期時,能接收任何包含時間和/或日期的字符串,它能根據當前的時間日期智能地分析字符串,從而獲得沒有指明的信息。你也能夠用彈出的日曆中選擇日期。想完整地瞭解時間/日期詢問的工做方式,能夠參考手冊。

8.3 截止期限和計劃安排

時間戳前面能夠加一些關鍵字來協助計劃安排。

截止期限

意義:任務(大多數狀況都會是一個TODO項,固然也能夠不是)應該完成的日期。

 
C-c C-d 在標題下面一行插入一個帶有「DEADLINE」關鍵字的時間戳。

在 截止日期 , 任務 會列在 議程 中。另外, 今天的議程 會在任務到期 orgdeadline-warning-days 天前對即將即將到期以及已通過期的任務給出提醒,直到任務被標記爲 DONE。例如:

*** TODO write article about the Earth for the Guide
    The editor in charge is bbdb:Ford Prefect
    DEADLINE: <2004-02-29 Sun>

日程安排

意義:你計劃在給定的那個日期開始進行那項任務。6

 
C-c C-s 在標題下面插入一個帶有「SCHEDULED」關鍵字的時間戳。

在給定的日期標題會列在議程中。7另外,對於過時的日程安排會在編輯爲 今天 並給出提醒,直到被標記爲 DONE。也就是說,任務會自動推遲日期直到它被完成。

*** TODO Call Trillian for a date on New Years Eve.
    SCHEDULED: <2004-12-25 Sat>

有些任務須要一再重複出現。Org 模式在截止期限、計劃安排和普通時間戳中用所謂的中繼器來管理這種任務。在下面的例子中:

** TODO Pay the rent
   DEADLINE: <2005-10-01 Sat +1m>

+1m 是一箇中繼器;上面的意思是任務有一個截止期限 ~ 2005-10-01~ ,並從這個日期開始每個月都重複出現。

8.4 記錄工做時間

使用 Org 能夠記錄在一個工程中花在某些特定任務上的時間。

 
C-c C-x C-i 開始當前條目的計時(clock-in)。這會插入一個 CLOCK 關鍵字和一個時間戳。加上 C-u 前綴,從當前已經計時的任務中選擇任務。
C-c C-x C-o 中止計時(clock-out)。這會在開始計時的地方插入另外一個時間戳。它會直接計算使用時間並插入到時間段的後面如 「=> HH:MM」。
C-c C-x C-e 爲當前的計時任務更新進度。
C-c C-x C-x 取消當前的計時。當你誤操做打開一個計時時,或者轉而去作其餘事情時,這個命令就頗有用。
C-c C-x C-j 跳轉到包含當前正在運行的計時的任務條目。用 C-uf前綴從當前計時的任務中選擇。
C-c C-x C-r 在當前文件插入一個包含像 Org 表格同樣的計時報告的動態塊。當光標正處於一個存在的塊上時,更新它。
  #+BEGIN: clocktable :maxlevel 2 :emphasize nil :scope file
  #+END: clocktable
  如何定製視圖,見手冊。
C-c C-c 在一個已經存在的計時錶格之上時,更新它。 更新動態塊。光標須要置於動態塊 #+BEGIN 這行。

l 鍵可能會在時間軸(見第 10.3.4 節)和議程(見第 10.3.1 節)中使用來查看一天中處理和關閉了哪些任務。

擴展閱讀
手冊第 8 章
Charles Cave’s Date and Time tutorial
Bernt Hansen’s clocking workflow

9 捕獲——轉發——存檔

任何組織系統都有一個重要功能,就是能捕獲新的靈感或者任務,並將相關的引用材料與之聯繫起來。Org 提供了一個捕獲過程來建立任務。它將與一個任務相關的文件(附件)保存在一個特定的目錄下。在系統中,任務和項目常常移動。將整個項目樹保存到一個歸檔文件中能夠保持系統簡潔快速。

9.1 捕獲

Org 的獲取一個新條目的方法很大程序上受 John Wiegley 的 excellent remem-ber package 的影響。它使得你能夠在工做流程中中斷一小會兒來存貯一個簡短的筆記。Org能夠爲新條目定義模板,並將它們與不一樣的目標文件關聯起來以保存筆記。

設定截取位置8

下面的定製爲筆記設置了一個默認的目標9文件,併爲捕獲新的任務定義了一個全局快捷鍵10

(setq org-default-notes-file (concat org-directory "/notes.org"))
(define-key global-map "\C-cc" 'org-capture)

截取的使用

 
C-c c 啓動一個捕獲過程。進入一個窄的間接緩衝區來編輯條目。
C-c C-c 一旦完成捕獲信息的輸入,能夠用 C-c C-c 返回以前的窗口,繼續中斷的工做。
C-c C-w 將條目保存到一個接收地址(見第2節)並結束。
C-c C-k 取消捕獲過程,返回以前的狀態。

捕獲模板

用能夠用不一樣的模板來作不一樣的捕獲筆記,並將它們保存到不一樣的地方。例如,你想將新任務保存到文件「TODO.org」的「Tasks」標題下,而將日記項目保存到「journal.org」中一個時間樹中。你能夠:

(setq org-capture-templates
      '(("t" "Todo" entry (file+headline "~/org/gtd.org" "Tasks")
         "* TODO %?\n %i\n %a")
        ("j" "Journal" entry (file+datetree "~/org/journal.org")
         "* %?\nEntered on %U\n %i\n %a")))

其中,第一個字符串是模式的關鍵字,第二個字符串是簡短的描述信息。接着是條目的類型和保存筆記的目標地址。最後是模板自己,它利用%做轉義符基於時間和上下文來填充一些信息。

當你調用 M-x org-capture 時,Org 提示輸入一個鍵來選擇模板(若是你有多個模板),而後就會給出像這樣的內容:

* TODO
 [[file:link to where you were when initiating capture]]

在擴展模板時,能夠用%轉義符進行動態地插入內容。下面是一些可使用的項,查看手冊得到更多的選項。11

 
%a 註解,一般是由 org-store-link 建立的連接
%i 初始化內容,當記憶時區域被C-u調用
%t 時間戳,只是日期
%T 帶有日期和時間的時間戳
%u,%U 同上,可是時間戳不激活

9.2 轉送筆記

當你回顧捕獲的數據時,能夠想把其中的一些條目轉送到另外一列表中,好比說到一工程項目。剪切,查找正確的地址,而後再粘貼筆記,這就彷佛有些麻煩。爲了簡化這個過程,能夠用專門的命令:

 
C-c C-w 轉送光標處的條目或者區域。這個命令會提供一些目標地址供選擇,你能夠經過補全功能選擇一個。條目(或者區域中的全部條目)就會做爲一個子項填充到目標標題下。
  默認狀況下,當前緩衝區的一級標題會被做爲轉送的目標,你能夠經過設置給出跨多個文件的複雜的定義。詳見變量 org-refile-targets 的描述。
C-u C-c C-w 藉助於轉送功能的接口來跳轉到一個標題。
C-u C-u C-c C-w 跳轉到 org-refile 最後轉送子樹所到的地方。

9.3 歸檔

當一個用(子)樹表示的工程完成後,你可能想把它移走,不讓它再在議程裏顯示。歸檔能使你的工做文件變得簡潔,並能使議程視圖構造等全局搜索保持高效。最經常使用的歸檔命令是將工程樹移到另外一個文件——歸檔文件。

 
C-c C-x C-a 用變量 orgarchive-default-command 指定的命令歸檔當前的項。
C-c C-x C-s 或者簡化爲 C-c $ 將光標處的子樹歸檔至 org-archive-location 指定的位置。

默認的歸檔位置是當前文件同目錄下,名爲當前文件名後加 「_archive」 的文件。例子和設置位置的方法見變量 org-archivelocation 的幫助信息。下面是一個在緩衝區內設置該變量的方法:

#+ARCHIVE: %s_done::

擴展閱讀
手冊第9章
Charles Cave’s remember tutorial
Sebastian Rose’s tutorial for capturing from a web browser

10 議程視圖

根據 Org 的工做方式,TODO 項、時間戳和帶標籤的標題分散在一個或者多個文件中。爲了可以查看某一天的項目或者事件,信息必須收集在一塊兒,以一種的有條理方式排序、顯示。有幾種不一樣的視圖,見下文。

收集的信息在一個專門的議程緩衝區中顯示。這個緩衝區是隻讀的,可是提供了一些命令能夠訪問原 Org 文件中對應的條目,而且能夠遠程地編輯這些文件。從議程緩衝區中遠程編輯是說,好比,你能夠在議程緩衝區中改變標題和約會的日期。議程緩衝區中使用的命令在第 10.4 節列出。

10.1 議程文件

顯示的信息一般是從各個議程文件中收集來的,這樣文件在變量 org-agenda-files 中列出。

 
C-c [ 將當前文件加入到議程文件列表中。當前文件會被加到列表的前面。若是文件已經在列表中,會被移到前面。帶有前綴時,文件添加/移到到後面。
C-c ] 將當前文件從議程文件列表中刪除。
C-, 遍歷議程文件列表,依次訪問其中的每個文件。

10.2 議程調度器

視圖是經過議程調試器建立的,一般咱們會給它設置一個全局快捷鍵——好比 C-c a (見第1.2節)。按 C-c a 以後,就會提示再輸入一個字母來執行對應的命令:

 
a 日曆式的議程。(見 10.3.1)
t/T TODO 項的列表。(見 10.3.2節)
m/M 匹配某個標籤表達式的標題的列表。(見 10.3.3)
L 當前文件的時間軸視圖。(見 10.3.4)
s 經過關鍵字和/或正則表達式選中的條目的列表。

10.3 內建議程視圖

 

10.3.1 周/日議程

周/日議程就像紙質的議程同樣,用以顯示本週或當天的全部任務。

 
C-c a a 從一列 Org 文件中爲本週收集出一個議程。議程顯示出天天的條目。

Emacs 包含了 Edward M. Reingold 的日曆和日記功能。Org 模式能識別日記的語法並容許在 Org 文件中直接使用日記的 sexp 條目:12

* Birthdays and similar stuff
#+CATEGORY: Holiday
  %%(org-calendar-holiday) ; special function for holiday names
#+CATEGORY: Ann
  %%(diary-anniversary 5 14 1956) Arthur Dent is %d years old
  %%(diary-anniversary 10 2 1869) Mahatma Gandhi would be %d years old

Org 能夠跟 Emacs 的約會提醒功能結合。想添加議程文件中的約會提醒,可使用命令 org-agenda-to-appt。詳見幫助文檔的描述。

10.3.2 全局TODO列表

全局TODO列表將全部未完成的 TODO 項格式化並集中到一處。TODO 項的遠程編輯使得咱們只用按一下鍵就能夠改變 TODO 項的狀態。TODO 列表中可使用的命令在第10.4節給出。

 
C-c a t 顯示全局 TODO 列表。這會從全部的議程文件(見第10章)中收集 TODO 項到一個緩衝區中。
C-c a T 同上,但能夠選擇 TODO 關鍵字

10.3.3 匹配標籤和屬性

若是議程文件中的標題帶有標籤(見第6章)或者帶有屬性(見第7章),就能夠基於這些元數據篩選標題到議程緩衝區中。這裏描述的匹配語法在用 C-c / m 建立稀疏樹時也一樣適用。在標籤列表中可使用的命令在第10.4節描述。

C-c a m  將匹配指定的標籤集的全部標題生成一個列表。這個命令詢問篩選規則,能夠是標籤的邏輯表達式,如 「+work+urgent-withboss」 或 「work|home」 (見第 6 章)。若是你常用某個搜索,能夠將它定義成一個命令。(見第 10.2 節)
C-c a M  同 C-c a m,但只複選同時也是 TODO 項的標題。                                                                         

匹配語法

搜索字符串可使用 ‘&’ 做與運算, ‘|’ 做或運算。‘&’ 的約束力比 ‘|’ 的強。括號功能如今還沒實現。用以搜索的元素能夠是標籤 、匹配標籤的正則表達式、或者像 PROPERTY OPERATOR VALUE 這樣帶有比較操做符的用來比較屬性值的表達式。第一個元素前面加 ‘-’ 表示不選匹配的項,加 ‘+‘ 表示選擇匹配的項。使用 ’+‘ 和 ’-「 時,與操做符 ‘&’ 就是可選的了。這裏有一些只使用標籤的例子。

」+work-boss「               選擇標有」:work:「的標題,但去掉同時也標有」:boss:「的標題。。
」work|laptop「              選擇標有」:work:「或者」:laptop:「的行。
」work|laptop+night「        跟前面相同,但要求標有」:laptop:「和行也要標有」:night:「。

匹配標籤時你也能夠嘗試同時匹配屬性,詳細內容見手冊。

10.3.4 單文件時間軸

時間軸用時間排序視圖概述單個文件中的全部帶有時間戳的條目。這個命令的目的是用來給出一個工程中事件的鳥瞰圖。

 
C-c a L 給出 Org 文件中全部帶時間戳條目的排序視圖。帶有 C-u 前綴時,沒有完成的 TODO 項(做了安排的以及沒做安排的)也列在當前日期下。

10.3.5 查找視圖

這個議程視圖用來對 Org 模式下的條目進行普通的文本查找。對於查找筆記頗有用。

 
C-c a s 這個查找方式可讓你經過匹配子串或者用邏輯表達式指定關鍵字來選擇條目。

例如,查找字符串 」computer equipment「 將會查找包含子串 」computer equipment「 的條目。查找視圖也能夠用布爾邏輯查找條目中的關鍵字。查找字符串 」+computer +wifi -ethernet-{8\.11[bg]}「 將會搜索包含關鍵字 computer 和 wifi 但不含 ethernet ,而且不被正則表達式 8\.11[bg] (排除 8.11b 和 8.11g) 匹配的筆記條目。

注意,除了議程文件,這條命令也會搜索 org-agenda-text-search-extra-files 中列出的文件。

10.4 議程緩衝區的命令

議程緩衝區中的條目連接到了它們的源 Org 或者日記文件。有一些命令能夠用來顯示和跳轉到條目的源位置,也能夠從視圖緩衝區中」遠程「編輯源文件。下面只是全部命令的一個選集,瀏覽 Agenda 菜單和手冊得到完整的列表。

動做

 
n 下一行(同 DOWN 和 C-n)。13
p 上一行(同 UP 和 C-p)。14

查看/轉到 Org 文件

 
mouse-3  
SPC 在另外一個窗口中顯示條目的源位置。帶前綴使得整個條目在大綱中可見,而不僅是標題。
TAB 在另外一個窗口中條目的源位置。在 Emacs 22 以前的版本,mouse-1 也有這個功能。
RET 轉到條目的源位置並刪除其它的窗口。15

改變顯示方式

 
o 刪除其餘的窗口。
d / w 切換到日/周視圖。
f 和 b 時間前移或者後移來顯示隨後的 org-agenda-current-span 天。例如,若是顯示了一週的內容,切換到下/上一週。
. 轉到今天。
j 詢問日期並轉到那天。
v l 或簡化爲 l 觸發日誌模式(Logbook mode)。在日誌模式中,當記錄功能打開(變量 org-log-done)時標記爲 DONE 的條目,以及在那天計時的條目,都會顯示在議程中。
r 或 g 從新構造議程,以反映最新的狀態。
s 保存當前 Emacs 會話的全部 Org 緩衝區和ID的地址。

二級篩選和查詢編輯

 
/ 根據標籤過濾當前的緩衝區。提示你輸入一個字母選擇一個標籤。先按‘-’排除一個標籤。
\ 經過增長條件縮小當前議程的視圖。16

遠程編輯(參考手冊得到更多命令)

 
0-9 數字參數。
t 修改議程和 org 文件中的條目的TODO狀態。
C-k 刪除當前的議程條目以及源文件中它的整個子樹。
C-c C-w 傳送當前的條目。
C-c C-x C-a 或簡做 a 用在 org-archive-default-command 中設置的默認歸檔命令對當前的條目對應的整個樹進行歸檔。
C-c C-x C-s 或簡做 $ 歸檔當前標題對應的樹。
C-c C-s 規劃(Schedule)一個條目,帶有前綴參數時刪除規劃時間戳。
C-c C-d 爲條目設置截止期限,帶前綴時刪除截止期限。
S-RIGHT 和 S-LEFT 將與當前行相關的時間戳改變一天。
I 對當前條目開始計時。
O / X 暫停/取消最近開始的計時。
J 在另外一個窗口中跳轉到正在進行的計時。

10.5 定製議程視圖

自定義搜索的主要用途是對於頻繁使用的搜索進行快捷鍵綁定,從而快捷地建立議程緩衝區或者稀疏樹(固然後者只涵蓋當前緩衝區的內容)。自定義的命令是用變量 org-agenda-custom-commands 來配置的。你能夠用 C-c a C 來定製這個變量。也能夠直接在 」.emacs「 中用 Emacs lisp 來設置。下面的例子包含了全部合法的搜索類型:

(setq org-agenda-custom-commands
      '(("w" todo "WAITING")
        ("u" tags "+boss-urgent")
        ("v" tags-todo "+boss-urgent")))

每一個項的首字符串是使用調度器命令 C-c a 以後要給出的鍵以使用相應的命令。一般都是單個字符。第二個參數是搜索類型,接着是用來進行匹配的字符串或者正則表達式。上面的例子定義了:

 
C-c a w 對於包含關鍵字 」「 的 TODO 項的全局搜索。
C-c a u 對於帶有標籤 」:boss:「 而不含標籤 」:urgent:「 的標題的全局標籤搜索。
C-c a v 同搜索 C-c a u,但搜索範圍只限於同時也是 TODO 項的標題。

擴展閱讀
手冊第 10 章
Mat Lundin’s tutorial about custom agenda commands
John Wiegley’s setup

11 準備導出

當導出 Org 模式的文檔時,導出器在後端(backend)儘量準確地反映出文檔的結構。因爲所要導出的目標文檔像 HTML,LaTeX 和 DocBook 具備豐富的格式,Org 爲富導出(rich export)提供了一些規則。這節概述 Org 模式緩衝區中的準備規則。

11.1 結構的組成元素

文檔標題

導出文件的標題在特定行給出:

#+TITLE: This is the title of the document

標題和章節

第二章描述的大綱結構肯定了導出文檔的結構基礎。然而因爲大綱結構也用於(好比說)列表和任務,所以只有前三個級別用做標題。更深的級別會被看做項目列表。你能夠經過變量 org-export-headline-levels 在全局設置這個開關,或者只是在單個文件中設置:

#+OPTIONS: H:4

目錄表

目錄表一般會直接插入在文檔第一個標題以前。

#+OPTIONS: toc:2 (目錄中只顯示二級標題)
#+OPTIONS: toc:nil (無目錄)

段落、分行和引用

段落之間至少要有一空行。若是你想實現段內分行,能夠在行後加上「\\」。

要想在一個區域內實現分行,而其餘地方使用正常格式,你可使用下面的構造,它也能夠用來實現詩歌的格式:

#+BEGIN_VERSE
 Great clouds overhead
 Tiny black birds rise and fall
 Snow covers Emacs

     -- AlexSchroeder
#+END_VERSE

當從另一個文檔中引用一段話時經過會讓它左右都縮進。在 Org 文檔中能夠這樣做引用:

#+BEGIN_QUOTE
Everything should be made as simple as possible,
but not any simpler -- Albert Einstein
#+END_QUOTE

若是你想讓某些文本居中,能夠這樣:

#+BEGIN_CENTER
Everything should be made as simple as possible, \\
but not any simpler
#+END_CENTER

強調和等寬

你可讓文字 粗體 , 斜體 , 下劃線 , 代碼 ,以及 逐文本 ,若是必需,也能夠'劃掉'。代碼和逐文本的字符串不會以Org模式的語法格式來處理,會被逐字輸出。想要插入一個水平格尺17,用一個只含有破折號的行來實現,要求至少有5個破折號。

註釋行

以‘#‘位於第 0 列的行會被看做註釋,不會被導出。若是你想要一個縮進的行也被做爲註釋,用「#+」開頭。另外以關鍵字 「COMMENT」 開頭的子樹整個樹都不會被導出。最後,被 「#+BEGIN_COMMENT「 … 」#+END_COMMENT」 包圍的整個區域也都不會被導出。

 
C-c ; 在一個項的開頭觸發 COMMENT 關鍵字

11.2 圖片和表格

對於 Org 模式的表格,以豎直線開頭的行會成爲表格的首行。你能夠在表格前面用下面幾行爲表格指定標題和標籤,以方便交叉引用,在文本中能夠用 \ref{tab:basic-data} 來引用它:

#+CAPTION: This is the caption for the next table (or link)
#+LABEL: tbl:basic-data
   | ... | ... |
   |-----+-----|

一些後端(HTML,LaTeX,以及 DocBook)容許直接插入圖片到導出的文檔中。Org 也能夠,只要圖片的連接不含有描述部分就好了,例如:

[[./img/a.jpg]]

若是你但願爲圖片定義一個標題,或者一個標籤方便內部交叉引用,可讓圖片單獨一行,在前面加上:

 #+CAPTION: This is the caption for the next figure link (or table)
 #+LABEL: fig:SED-HR4049
 [[./img/a.jpg]]

你也能夠爲圖形指定一些其餘的特性。但因爲這與後端18密切相關,能夠參考關於特定後端的章節得到詳細信息。

11.3 純文本的例子

你能夠包含進來一些純文本的例子,這不屬於準備的範疇。這些例子會等寬排版,因此適用於代碼以及其餘相似的狀況:

#+BEGIN_EXAMPLE
Some example from a text file.
#+END_EXAMPLE

爲了簡單化,一些小型的例子也能夠將各行以冒號開頭。冒號前面能夠有空格:

Here is an example
   : Some example from a text file.

對於一些程序設計語言的源代碼以及一些其餘的文本,能夠被 Emacs 的字體鎖(font-lock)特殊標記,你也可讓它們像在Emacs的緩衝區中那樣顯示:

#+BEGIN_SRC emacs-lisp
(defun org-xor (a b)
   "Exclusive or."
   (if a (not b) b))
#+END_SRC

爲了能在支持這種語言的專門的緩衝區中編輯例子,能夠用 C-c , 啓動和退出編輯緩衝區。

11.4 包含文件

當導出文檔時,你能夠包含其餘文件中的內容。好比,想包含你的「.emacs」文件,你能夠用:

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

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

11.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 代碼片段會生成圖片幷包含進來。

擴展閱讀
手冊第11章

12 導出

Org模式文檔能夠導出成多種格式:ASCII 用於包含在郵件中;HTML 用來發布到網頁上;LaTeX/PDF 用來打印出漂亮的文檔;DocBook 經過DocBook工具轉換成其餘各類各樣的格式。也能夠導出成 iCalendar 格式,將計劃信息併入到桌面日曆中。

12.1 導出選項

導出器能識別緩衝區中提供附加信息的特殊行。這樣行能夠放在文件中的任何地方。整個集合能夠用 C-c C-e t 插入到緩衝區中。

 
C-c C-c t 插入導出選項模板,見下面的例子
#+TITLE:       the title to be shown (default is the buffer name)
#+AUTHOR:      the author (default taken from user-full-name)
#+DATE:        a date, fixed, of 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 ...
#+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}

12.2 導出調度器

全部的導出命令均可以經過導出調度器來使用,調度器是一個前綴快捷鍵,它會提示輸入一個字母來指定命令。一般整個文件都會被導出,可是若是選中區域包含大綱樹,就會導出大綱樹,並以第一個標題做爲文件標題。

 
C-c C-e 用來導出和發佈的調度器

12.3 ASCII/Latin-1/UTF-8 的導出

ASCII導出功能能給 Org 文件提供的一個簡單易讀的版本,它只包含純 ASCII 文本。Latin-1 和 UTF-8 導出用它們能編碼的特殊字符擴展了文件的功能。

 
C-c C-e a 導出 ASCII 文件
C-c C-e n 和 C-c C-e N 和上面的命令同樣,可是用 Latin-1 編碼19
C-c C-e u 和 C-c C-e U 和上面的命令同樣,可是用 UTF-8 編碼

12.4 HTML的導出

 
C-c C-e h 導出 HTML 文件
C-c C-e b 導出 HTML 文件並用瀏覽器打開

想要將 HTML 以純文本方式複製到導出文件,能夠:

#+HTML: Literal HTML code for export

或者

 #+BEGIN_HTML
 All lines between these markers are exported literally
 #+END_HTML

12.5 LaTeX和PDF的導出

 
C-c C-e l 導出 LaTeX 文件
C-c C-e p 導出 LaTeX 文件,並處理成 PDF 文件
C-c C-e d 導出 LaTeX 文件,處理成 PDF 文件,並打開

默認,LaTeX輸出是使用article類型。但你能夠在文件中經過選項 #+LaTeX_CLASS: myclass 來改變,但類型必須是 org-export-latex-classes 中列出的。

第 11.5 節撰述的內嵌的 LaTeX 能夠正確地插入到 LaTeX 文件中。跟 HTML 導出器類似,也能夠經過 #+LaTeX: 和#+BEGIN_LaTeX ... #+END_LaTeX 來加入純文本的 LaTex 代碼。

12.6 DocBook的導出

 
C-c C-e D 導出 DocBook 文件

跟 HTML 導出器類似,也能夠經過 #+DocBook: 和 #+BEGIN_DocBook ... #+END_DocBook 結構來加入純文本的 DocBook 代碼。20

12.7 iCalendar的導出

 
C-c C-e i 在一個 「.ice」 文件中爲當前文件建立 iCalendar 項。
C-c C-e c 從 org-agenda-files 中的全部文件建立一個較大的 iCalendar 文件,並寫入到 org-combined-agenda-icalendar-file 指定的文件中。

擴展閱讀
手冊第12章
Sebastian Rose’s image handling tutorial
Thomas Dye’s LaTeX export tutorial Eric Fraga’s BEAMER presentation tutorial

13 發佈

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 用時間戳來查看文件是否改變。上面的命令只發布修改過的文件。你能夠給它們加上前綴來強制從新發布全部的文件。

擴展閱讀
手冊第 1 章
Sebastian Rose’s publishing tutorial
Ian Barton’s Jekyll/blogging setup

14 處理源代碼

Org模式提供了一系列功能來處理源代碼,包括源代碼塊的本地主模式編輯,代碼塊的運行(evaluation),代碼塊的混合,以及以多種方式導出代碼塊和它們的結果。

代碼塊的結構

代碼塊的結構就像下面這樣:

#+srcname: <name>
#+begin_src <language> <switches> <header arguments>
  <body>
#+end_src

其中<name>是代碼塊的名稱,<language>指定代碼塊的語言(例如,emacs-lisp,shell,R,python,等等),<switches>用以控制代碼塊的導出,<header arguments>用來從多個方面控制代碼塊的行爲,下面會詳述,最後<body>是咱們要寫的代碼。

編輯源代碼

使用C-c ,21 來編輯當前代碼塊。這個命令會新開一個以代碼語言爲主模式幷包含代碼的緩衝區(buffer)。保存這個緩衝區,會將新的內容寫回Org緩衝區。再次使用C-c , 退出這個緩衝區。

運行代碼塊

用 C-c C-c 運行當前代碼塊並將它們的結果插入 Org 緩衝區中。默認狀況下,運行功能只對 emacs-lisp 代碼塊開啓,但支持多種語言。所支持語言的完整列表見手冊。下面是一個代碼塊和它的結果。

#+begin_src emacs-lisp
  (+ 1 2 3 4)
#+end_src

#+results:
: 10

抽取源代碼

用 C-c C-v 將代碼塊從一個 Org 模式的文件中抽取到「雜貨庫」(Library of Babel)中,這樣在全部的 Org 模式的緩衝區中均可以運行該代碼。一個經常使用的代碼塊集合在 contrib/library-of-babel.org 中隨 Org 一直髮布。

頭參數

運行和導出代碼時的不少選項都經過頭參數來設置。選項能夠指定爲全局的,文件級別的,大綱子樹級別的,或者只是用於一個代碼塊。下面解釋部分頭參數。

 
:var :var頭參數用來將參數傳遞給代碼塊。能用來傳遞給參數的值能夠是直接量,org模式表格中的值,文字實例塊(literal example blocks)中的值,或者一個已命名代碼塊的結果。
:results :result頭參數控制代碼塊結果的收集、類型和處理。output和value(默認)的值指定怎樣在運行代碼塊時收集結果。vector,scalar,file, raw, html, latex 和 code的值指定代碼塊結果的類型並以此肯定將結果併入Org緩衝區的方式。silent, replace, prepend和 append指定處理代碼塊結果的方式,明確是否以及如何將結果插入Org緩衝區中。
:session :session頭參數將會使代碼塊在Emacs的一個持續交互的底層進程(persistent interactive inferior process)中執行。這考慮到了代碼運行的持續狀態和運行結果的人工檢查。
:exports 代碼和塊結果的任何組合在導出時均可以保持,這能夠經過設置:results頭參數爲code results none或者both來指定。
:tangle 頭參數:tangle yes將使代碼塊的內容到保存到一個以Org模式緩衝區命名的文件中。也能夠經過:tangle filename指明文件名。
:cache 頭參數:cache yes將使繁雜的代碼塊和結果關聯,確保輸入改變時代碼塊重運行。
:noweb 頭參數:noweb將擴展運行和混合時的」noweb「樣式的引用。
:file 將代碼塊結果輸出到文件時(好比,圖形,表格,圖表)能夠用頭參數:file filename,結果會被保存至指定的文件中,在Org緩衝區中插入一個到該文件的連接。

擴展閱讀
手冊第 11.3 節
The Babel site on Worg

15 雜項

 

15.1 補全

Org 支持用 M-TAB 進行緩衝區內部的補全。這種補全不須要利用 minibuffer。你只須要鍵入幾個字母而後用快捷鍵在原位補全。例如,這個命令能夠在‘\’後面補全 TeX 符號,在標題的開頭補全 TODO 關鍵字,在‘:’以後補全標籤。

15.2 一個更清晰的大綱視圖

當 Org 標題含有不少星號而且標題下面的文字不縮進時,就會顯得雜亂無章。當寫一個圖書結構的文件時,大綱標題就是實際章節的標題,基於列表機大綱,上面的問題就不會再有,縮進的結構也會更清晰:

* Top level headline 
** Second level 
*** 3rd level
some text 
*** 3rd level
more text 
* Another top level headline

若是你用的 Emacs 23.1.50.3 和 Org 6.29 的更高版本,這種視圖能夠用 org-indent-mode 模式動態地實現,它會在每行前面加上一些前導空格。你能夠經過設置變量 org-startup-indented 爲全部的文件打開 org-indent-mode 模式,或者用

#+STARTUP: indent

爲單個文件打開縮進。 若是你想在 Emacs 或者 Org 的早期版本中實現一樣的效果,或者想讓縮進用硬空格符號,以使得純文本文件看起來同樣。Org 能夠縮進標題下面的文本(用TAB);隱藏標題中的星號;只使用一級、三級等標題來爲每級實現兩個字符的縮進,從而實現這個功能。爲了使這個特性在文件中支持,用:

#+STARTUP: hidestars odd

15.3 MobileOrg

MobileOrg 最初是由 Richard Moreland 爲 iPhone/iPod Touch 系列設備開發的應用程序。Matt Jones也爲Android設備獨立實現了一個版本。詳見Org手冊。


note 本文的英文原文是 Org 主頁上的一篇簡短手冊( The compact Org-mode Guide )。另外:

  • 本文的腳註是雙向連接的,你能夠大膽地查看腳註而不用擔憂如何再定位到原文。
  • 我不知道如何在引用的源代碼中加腳註,若是你知道,但願你能告訴我。
  • 我不知道若是在表格中正確顯示‘|’,若是你知道,但願你能告訴我。
  • 本文可能有錯誤,若是發現錯誤,請在評論中給出。

返回

Footnotes:

1 見說明

2 固然你也能夠專門用一個文件來記錄待辦事項,但這不是必需的。

3 對應的buffer中的設置是:#+STARTUP: logdone

4 對應的buffer中的設置是:#+STARTUP: lognotedone

5 跟全部的緩衝區內設置同樣,用C-c C-c 使行中的改變生效。

6 這跟一般意義上的 安排一個會議 ( scheduling a meeting )不一樣,後者只要在Org模式中插入一個不帶關鍵字的時間戳就好了。

7 即便被標記爲 DONE,在指定日期它依然會列在議程中。若是你不但願這樣能夠用變量 org-agenda-skip-scheduled-if-done 來設置。

8 截取位置是指保存截取信息的文件地址。

9 使用捕獲模板,能夠定義更細緻的捕獲地址,見[Capture templates]。

10 請設置你本身的快捷鍵,C-c c 只是一個建議。

11 這個表格實在翻譯不通,之後再說吧。

12 注意,後兩行中參數的順序(月,日,年)依賴於 calendar-date-style 的設置。

13 原文是 C-p 有誤。

14 原文是 C-n,有誤。

15 在視圖緩衝區的位置直接打開源位置,多是版本的問題,並不刪除其餘的窗口。

16 不知道爲何個人版本不識別這個命令。

17 分隔線

18 (backend,導出目標)

19 多是版本的問題,這個命令和下面的命令在個人機器上沒有。

20 原文說是 LaTeX 代碼,有誤。

21 前面的逗號是命令的一部分,下同。

相關文章
相關標籤/搜索