Posts Org-mode基本功能
Post
Cancel

Org-mode基本功能

前言

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. 有序列表1
  2. 有序列表2
    1. 有序子列表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. [-] 总任务1 [33%]
    1. 子任务1
    2. 子任务2
    3. 子任务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 键可以补全到下一格(下一行), |- 可以补全得到 |----------|---------|---------|,展示结果如下:

namephonejobscore1score2total
Zhangsan1234455student193049
Lisi423423layer201030

其中 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 可作为 TODODONE 状态切换, 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
This post is licensed under CC BY 4.0 by the author.