前言
Org mode为Emacs下的一款神器,与markdown这种轻量化格式相比, 拥有更多的功能与可拓展性,但是入门还是有一定的难度, 这里仅对其中的一些基本功能做简单的的介绍。
本文系统Ubuntu下Emacs版本为25.1.1,Org-mode版本为9.2
章节序号
org-mode以*表示章节标题,*数目表示标题级别:
1
2
3
* 一级标题
** 二级标题
*** 三级标题
通过 M-[RET]
键进行同级标题的插入,可以通过 M-left/right
标题的升降级, 通过 M-up/down
进行章节内容(包括子章节)的上下替换, 可以通过 Tab
键进行章节的展开和折叠, S+Tab
键可以展开、折叠所有的章节.
序号列表包括无序列表和有序列表两种:
无序列表:
- 无序列表1
- 无序列表2
- 无序子列表3
有序列表:
- 有序列表1
- 有序列表2
- 有序子列表3
其中,无序列表以 +或-
作前缀,有序列表以 1.或1)
作前缀:
1
2
3
4
5
6
7
8
无序列表:
+ 无序列表1
+ 无序列表2
+ 无序子列表3
有序列表:
1) 有序列表1
2) 有序列表2
1) 有序子列表3
通过=M-[RET]= 键进行同级标题的换行输入,通过 M-left/right
升降级, 通过 M-up/down
上下更换, 可以通过 S-left/right
进行形式的切换(如无序列表切换为有序列表)
Org列表的另一个特点是可以加入 checkbox, 形式为[],放在任务前面可以标记任务的完成状态, 放在任务后面可以标记任务完成度,里面需要加 %
或 /
, 如 [20%]
,效果如下:
- [-] 总任务1
[33%]
- 子任务1
- 子任务2
- 子任务3
带有 checkbox 的列表可以通过 M-S-[RET]
生成, 通过 C-c C-c
可以切换任务完成状态,总任务完成进度会自动统计
表格
Org-mode的表格通过一下格式实现:
1
2
3
4
5
| name | phone | job | score1 | score2 | total |
|----------|---------|---------|--------|--------|-------|
| Zhangsan | 1234455 | student | 19 | 30 | 49 |
| Lisi | 423423 | layer | 20 | 10 | 30 |
#+TBLFM: $6=$4+$5
首行需要自己设置列数, Tab
键可以补全到下一格(下一行), |-
可以补全得到 |----------|---------|---------|
,展示结果如下:
name | phone | job | score1 | score2 | total |
---|---|---|---|---|---|
Zhangsan | 1234455 | student | 19 | 30 | 49 |
Lisi | 423423 | layer | 20 | 10 | 30 |
其中 total
列可以通过 = $4+$5
的形式自动求和,以 C-u C-c C-c
执行
链接
链接形式如下:My-blog, 输入后,GNU显示会发生变化,通过 C-c C-l
进行编辑
1
2
[[链接地址][链接内容]]
[[https://johneyzheng.top][My_blog]]
显示图片形式类似:
1
2
3
4
# 带file的图片路径
[[file:/home/path_of_pics]]
# 或者当前路径
[[./pics/file.jpg]]
TODO 插入图片网页地址,如:
脚注
脚注形式如下:
1
需要添加脚注的内容[fn:2]
可通过 C-c C-x f
插入,通过 C-c C-c
进行脚注跳转, 具体内容为 [fn:num]
,也可主动输入
标记(Tags)
tags用的不多,可用 C-c C-q
为章节标题添加标签
TODO事项
TODO为org-mode的一个特色,算是一个时间管理工具(GDK),形式如下:
TODO
TODO
TODO
TODO [1/3]
- 吃饭
- 睡觉
- 打豆豆
输入内容如下:
1
2
3
4
5
6
7
** TODO [#A]
** TODO [#B]
** TODO [#C]
*** TODO [1/3]
+ [ ] sub1
+ [X] sub2
+ [ ] sub3
其中 S-left/right
可作为 TODO
和 DONE
状态切换, S-up/down
可作为优先级切换, M-S-[RET]
用于同级插入TODO标签
插入时间
C-c .
可用于插入时间,会在底部出现日历即可插入,如:
1
2
3
* TODO 看电影
SCHEDULED: <2019-01-25 五>
DEADLINE: <2019-01-27 日>
字体设置
常见字体设置:
1
2
3
4
5
6
*bold*
/italic/
_underlined_
=code=
~verbatim~
+striken-through+
结果如下:
bold
italic
underlined
code
verbatim
striken-through
多种文本格式输出
文本格式输出需要在不同的mode下运行,一般通过 <+字符+Tab
补全的形式得到, 如 <s+Tab
会得到( <s
后需要 C-x C-s
保存下buffer),常见的使用方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
设置标题和目录:
# +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
不同文本形式的不同字符定义如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
s #+BEGIN_SRC ... #+END_SRC
e #+BEGIN_EXAMPLE ... #+END_EXAMPLE
q #+BEGIN_QUOTE ... #+END_QUOTE
v #+BEGIN_VERSE ... #+END_VERSE
c #+BEGIN_CENTER ... #+END_CENTER
C #+BEGIN_COMMENT ... #+END_COMMENT
l #+BEGIN_EXPORT latex ... #+END_EXPORT
L #+LATEX:
h #+BEGIN_EXPORT html ... #+END_EXPORT
H #+HTML:
a #+BEGIN_EXPORT ascii ... #+END_EXPORT
A #+ASCII:
i #+INDEX: line
I #+INCLUDE: line
源代码的插入与运行
源代码格式为:
1
2
#+BEGIN_SRC 语言
#+END_SRC
语言有: emacs-lisp
, python
, sh
, haskell
, js
, latex
, gnuplot
, C
, sql
, ditaa
如插入Python代码:
1
2
3
4
5
6
#+BEGIN_SRC python
def func:
b = 1
a = b + 1
return a
#+END_SRC
可通过 C-c+'
进行代码的编辑,显示结果如下:
1
2
3
4
def func:
b = 1
a = b + 1
return a
另外还可以通过代码缓存区进行代码的运行,命令为 C-c C-c
需要在 .emacs/init.el
文件中添加设置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(org-babel-do-load-languages
'org-babel-load-languages
'((R . t)
(emacs-lisp . t)
(python . t)
(sh . t)
(haskell . t)
(js . t)
(latex . t)
(gnuplot . t)
(C . t)
(sql . t)
(ditaa . t)
))
方便代码区语法高亮和缩进可添加设置:
1
2
(setq org-src-tab-acts-natively t)
(setq org-src-fontify-natively t)
运行结果如下:
1
2
3
4
5
6
#+BEGIN_SRC emacs-lisp
(+ 1 2 3 4)
#+END_SRC
#+RESULTS:
: 10
python亦然:
1
2
3
4
5
6
7
#+BEGIN_SRC python :results output
a = 1+1
print a
#+END_SRC
#+RESULTS:
: 2
C语言:
1
2
3
4
5
6
7
8
#+BEGIN_SRC C :include <stdio.h>
int a=1;
int b=2;
printf("%d", a+b);
#+END_SRC
#+RESULTS:
: 3
导出其他格式
.org文件可以导出各类文件,可通过 C-c C-e
执行输出, 默认情况没有 markdown
文件的导出设置, 可在设置文件中添加:
1
2
3
;; export to markdown mode
(eval-after-load "org"
'(require 'ox-md nil t))
另外对于中文pdf的导出,需要一定的设置,首先需要安装texlive和autex:
1
2
3
sudo apt-get install texlive texlive-xetex texlive-latex-extra
sudo apt-get install latex-cjk-all
sudo apt install auctex
然后在 init.el
文件中添加设置(根据org-mode版本):
1
2
3
4
5
6
;; org-mode < 8.0
(setq org-latex-to-pdf-process '("xelatex -interaction nonstopmode %f"
"xelatex -interaction nonstopmode %f"))
;; org-mode 8.0
(setq org-latex-pdf-process '("xelatex -interaction nonstopmode %f"
"xelatex -interaction nonstopmode %f"))
复制windows下的字体,文件为 windows/fonts/
复制到 ~/.fonts/
,文件包括:
1
2
3
文件:
*.TTC
SIM*.ttf
需要导出的文件文件头需要添加字体设置:
1
2
3
4
5
#+LATEX_HEADER: \usepackage{xltxtra}
#+LATEX_HEADER: \setmainfont{WenQuanYi Micro Hei}
或者:
#+LATEX_HEADER: \usepackage{xeCJK}
#+LATEX_HEADER: \setCJKmainfont{SimSun}
最后,可以通过 C-c C-e l p
命令输出pdf
如果希望取消目录的输出可在文件头部设置 toc
参数, num
表示设置输出目录级别:
1
#+OPTIONS: toc:nil