org-mode 入門教程
org-mode是Emacs提供的一個強大的編輯模式,可以用於做會議筆記以及制作各種待辦事項(GDT)。其語法類似於Markdown但是提供了比Markdown更多的操作,再加上Emacs強大的編輯功能,能給筆記增加很多動態的操作(能純文本上實現折疊、展開、樹狀視圖、表格求和、求代碼運行結果等功能),可以說org-mode是最強大的標記語言。而org-mode的強大,也導致了他比markdown更加復雜,需要花些時間來練習,本文選出了org-mode最強大、實用的功能,進行最簡單的介紹,下面介紹org-mode的使用方法。

安裝
Emacs最新版本(24.4)自帶org-mode,這就意味着只要打開一個后綴名為org的文件就會自動進入org-mode。因此我們只需要下載最新版的Emacs即可。
windows用戶:到http://ftp.gnu.org/gnu/emacs/windows/ 下載最新版
ubuntu系列:在終端中輸入:sudo apt-get install emacs
配置
org-mode功能基本比較完善,不需要更多的配置,但是org模式下默認沒有自動換行的功能,我們在.emacs文件里面添加如下代碼,實現自動換行:
(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))
實例教程
以下分別講解org-mode下幾個實用的功能,更完整的教程可以參考官網教程。下面一步一步完成我們的org文件。(本教程中我們定義 C-x
表示按Ctrl+x,M+x
標識Alt+x,S+x
代表Shift+x,這也是Emacs的標准定義)
新建文件
1) 打開Emacs
2) 輸入 C-x C-f ~/test/test.org
注意文件后綴名為org,該命令新建了一個名為test.org的文件。
新建完文件后,我們就可以輸入相應的內容了。以下是org-mode語法的具體介紹。
章節
org-mode用*
標識章節,一個*
代表一級標題,兩個*
代表兩級標題,以此類推。
在Emacs中輸入以下內容:
* 標題一 ** 標題二
注意型號后面有空格。可以發現,不同層級標題的顏色是不一樣的。按Alt加左右鍵能夠升降標題的層級。一些常用快捷鍵如下:
S+Tab
展開、折疊所有章節Tab
對光標所在章節進行展開、折疊M+left/right
升級/降級標題
列表
列表是文本中一個比較常用的元素,可以列出各種待完成的事項等。org-mode提供了一種很獨特的功能,可以加入checkbok(實際就是加入一對中間有空格的方括號[ ]
)標記任務的完成狀況,而且如果一個總任務有多個子任務,還可以根據子任務的完成情況計算總進度(只需要在總任務后面添加一對方括號,里面加上%
或/
如[%],[/]
)。列表分為有序和無序兩種,有序列表以1.
或 1)
開頭,無序列表以+
或-
開頭 后面,同樣,后面要跟一個空格。
我們輸入一個無序列表:
+ treeroot
+ branch1 + branch2
在輸入的時候,我們按M-RET
(Alt+回車)可以自動輸入同級的條目,按M+left/right
調整層級。同理,我們還可以輸入一個有序列表:
1) [-] 任務1 [33%] 1) [ ] 子任務1 2) [X] 子任務2 3) [ ] 子任務3 2) [ ] 任務2
我們按M-S-RET
可以輸入一個帶checkbox的列表項,而在總任務后面可以輸入一個[%]
或者[/]
則能自動計算總任務進度。最后結果如圖所示。

常用快捷鍵:
M-RET
插入同級列表項M-S-RET
插入有 checkbox的同級列表項C-c C-c
改變 checkbox狀態M-left/right
改變列表項層級關系M-up/dowm
上下移動列表項
腳注
用[fn:1]
的方式插入腳注,而在最下面插入
[fn:1]本文參考自http://orgmode.org/orgguide.pdf
這個標簽是可以點擊的。
表格
表格常用於數據展示,org-mode提供了方便的列表操作。其中最獨特的是支持類似於Excel的表格函數,可以完成簡單的求和等操作
創建表格時,在新建表格時,首先輸入表頭:
input | Name | Phone | sub1 | sub2 | total | |-
然后在第二行后面按 tab,表格就會自動生成:
| Name | Phone | sub1 | sub2 | total | |---------+--------+------+------+-------| | | | | | |
下面我們填入一些數據,在填寫的過程中,按Tab鍵可以調到右方表格,按Enter則能跳到下方表格。如果同時按住Shift,則是反方向跳。輸入表格完成后,按 C-c C-c
則能自動對齊表格,出入完成對齊后,表格如下:
| Name | Phone | sub1 | sub2 | total | |-------------+--------+------+------+-------| | maple | 134... | 89 | 98 | | | wizard | 152... | 78 | 65 | | | Hello World | 123... | 76 | 87 | | | hehe | 157... | 87 | 78 | |
下面我們來體驗下org-mode的強大的表格函數。我們在total列任選一個位置,輸入=$3+$4
,然后按C-u C-c C-c
,org-mode便能自動為我們計算所有三列加四列的和,並放到第五列。最后完成的表格如下
| Name | Phone | sub1 | sub2 | total | |-------------+--------+------+------+-------| | maple | 134... | 89 | 98 | 187 | | wizard | 152... | 78 | 65 | 143 | | Hello World | 123... | 76 | 87 | 163 | | hehe | 157... | 87 | 78 | 165 | # +TBLFM: $5=$3+$4

如果要插入行和列,可在表頭添加一個標簽或者新起一行,輸入|再調整格式即可。其中最后一行是ogr-mode自動添加的。一些快捷鍵如下:
C-c |
通過輸入大小的方式插入表格C-c C-c
對齊表格Tab
調到右邊一個表格enter
跳到下方的表格M-up/right/left/right
上下左右移動行(列)M-S-up/right/left/right
向上下左右插入行(列)
鏈接
鏈接用於鏈接一些資源地址,如圖片、文件、URL等。
鏈接的格式是:
[[鏈接地址][鏈接內容]]
如:
[[http://orgmode.org/orgguide.pdf][grgguid.pdf]]] [[file:/home/maple/圖片/test.jpg][a picture]]
如果去掉標簽,則能直接顯示圖片:
[[file:/home/maple/圖片/test.jpg]]
直接顯示的圖片在Emacs里默認不顯示,需按C-c C-x C-v
才能顯示,在輸出成其他格式(html、pdf……)后也能看到。
常用快捷鍵:
C-c C-x C-v
直接預覽圖片。
待辦事項(TODO )
TODO是org-mode最具特色的一個功能,也是org-mode設計的初衷,org-mode的作者本意是用其來完成一個個人時間管理程序(GDT)。因此,可以用org-mode來做一個個人時間管理工具!
下面我們來看怎么寫TODO。TODO 也是一類標題,因此也需要用*
開頭,在Emacs中輸入:
** TODO 洗衣服
可以看到當中的TODO變成了紅色,我們講光標移到該行,按C-c C-t
,則發現TODO變成了DONE(這個序列可以自己定義,詳見org-mode手冊)。org-mode兼有了標題和列表的功能,也可以添加checkbox和完成進度,除此之外,還可以設計優先級。
我們輸入:
*** TODO [# A] 任務1 *** TODO [# B] 任務2 *** TODO 總任務 [33%] **** TODO 子任務1 **** TODO 子任務2 [0%] - [-] subsub1 [1/2] - [ ] subsub2 - [X] subsub3 **** DONE 一個已完成的任務
一些常用操作如下:
C-c C-t
變換TODO的狀態C-c / t
以樹的形式展示所有的 TODOC-c C-c
改變 checkbox狀態C-c
, 設置優先級(方括號里的ABC)M-S-RET
插入同級TODO標簽
標簽Tags
在org-mode中,可以給每一章節添加一個標簽,我們可以通過樹的結構來查看所有帶標簽的章節。在每一節中,子標題的標簽會繼承父標題標簽。
輸入:
*** 章標題 :work:learn: **** 節標題1 :fly:plane: **** 節標題2 :car:run:
一些常用命令如下:
C-c C-q
為標題添加標簽C-c / m
生成帶標簽的樹
時間
org-mode可以利用Emacs的時間空間插入當前時間。
輸入C-c .
會出現一個日歷,我們點選相應的時間即可插入。
<2015-02-17 二>
時間前可以加DEADLINE:和SCHEDULED:表示時間的類型如:
DEADLINE:<2015-02-12 四>
下面給出一個常見的TODO標簽的模板:
*** TODO 洗衣服
SCHEDULED: <2015-02-19 四> DEADLINE: <2015-03-01 日>
常用命令如下:
C-c .
插入時間
一些特殊文本格式
和其他標記語言一樣,org-mode也支持各種特殊文本格式(如斜體、下划線等)。如下所示:
*bold* /italic/ _underlined_ =code= ~verbatim~ +strike-through+
富文本導出
org-mode的強大之處還在於它能到出成各種不同的格式,例如html、pdf等,在導出時,可以加入一些說明符號,來制定導出選項,常用導出符號如下:
設置標題和目錄:
# +TITLE: This is the title of the document # +OPTIONS: toc:2 (only to two levels in TOC) # +OPTIONS: toc:nil (no TOC at all)
添加引用:
# +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
設置樣例(在這里面的內容將會被直接輸出,不會被轉義)
# +BEGIN_EXAMPLE 這里面的字符不會被轉義 # +END_EXAMPLE
注釋,這些內容不會被導出
注釋的用法# this is comment # +BEGIN_COMMENT 這里的注釋不會被導出 # +END_COMMENT
Latex使用,org-mode能支持直接輸入LaTeX,在導出后LaTeX能被正確解釋:
∇2x=∫Ωalogbn∑i=1aidΩ∇2x=∫Ωalogb∑i=1naidΩ
插入源代碼
org-mode除了可以直接插入源代碼之外,可以直接求出運行結果,這也是其強大之處,在使用之前,需要在.emacs配置文件中設置加載的運行語言:
(org-babel-do-load-languages 'org-babel-load-languages '( (sh . t) (python . t) (R . t) (ruby . t) (ditaa . t) (dot . t) (octave . t) (sqlite . t) (perl . t) (C . t) ))
設置好之后輸入:
# +BEGIN_SRC emacs-lisp (+ 1 2 3 4) # +END_SRC
將光標移到代碼塊內,按C-c C-c
,org-mode會自動添加如下一行:
# +RESULTS: : 10
這正是該代碼的計算結果。下面試一試Python代碼:
# +BEGIN_SRC python :results output a = 1+1 print a # +END_SRC # +RESULTS: : 2
下面測試一下C語言
# +begin_src C++ :includes <stdio.h> int a=1; int b=1; printf("%d\n", a+b); # +end_src # +RESULTS: : 2
常用快捷鍵:
C-c C-c
對當前代碼塊求值
關於導出
org-mode導出pdf需要LaTeX支持,而導出html很方便,但是導出的html美柚任何樣式,org-mode為每個模塊都添加了css的標簽,我們可以將現成的css文件直接加入,便能得到一個好看的輸出樣式了:
在頭部加入
# +HTML_HEAD: <link rel="stylesheet" type="text/css" href="style1.css" />
該代碼加載我們的css。下面我們來將我們的文件導出成html。按C-c C-e
會出現一個如圖的提示框,問我們導出那種格式,我們選h
導出html。

常用快捷鍵:
C-c C-e
選擇相應的導出格式
結論
org-mode是Emacs非常重要的一個模式,自其誕生之后,受到了各種Emacs粉絲的追捧,甚至在VIM上也衍生出了org-mode的分支,足見它的人氣。通過本教程介紹,我們已經見識到了org-mode 的強大功能,而這僅僅只是org-mode功能的一小部分,org-mode更多的功能等待這我們去探索、發現。更多文章請訪問切問錄http://www.fuzihao.org
附件
org文件tutorial.org
導出html文件tutorial.html (直接點擊可以看到效果,點右鍵另存為即是編譯后的文件)
參考文獻
[1]org-mode 官方教程 http://orgmode.org/orgguide.pdf
from: http://www.fuzihao.org/blog/2015/02/19/org-mode%E6%95%99%E7%A8%8B/