Emacs org-mode 2 文档结构
Emacs org-mode 2 文档结构
Table of Contents
1 文档结构
1.1 章节/标题
1.1.1 编写规则
org-mode用一个字符 * 标识章节,一个 * 代表一级标题,两个 * 代表两级标题,以此类推。最多6颗星,也就是最多6级。
书写格式如下:
* 一级标题 ** 二级标题 * 另一个一级标题 ** 另一个二级标题 *** 三级标题
注意, * 后有空格。不同的级别显示的颜色不一样。
1.1.2 标题的展开与折叠
标题与正文在当前buffer中显示样式,分为四个级别:overview,content,showall,showeverything。
- overview
- 只显示一级标题
- content
- 展开所有层级标题,但是不显示正文内容。
- showall
- 展开所有子标题及正文内容。
- showeverything
- 显示所有内容
- 手动展开与折叠
在官方的表述中, 标题的展开与折叠称为 visible circling. 看名字可以理解为循环,如下:
通过tab(org-cycle) 键实现如下循环: ,-> FOLDED -> CHILDREN -> SUBTREE –. '------------------------------–—'
或者通过S-tab(org-global-cycle) 实现如下循环: ,-> OVERVIEW -> CONTENTS -> SHOW ALL –. '---------------------------------–—'
通过类似的一些快捷键,我们可以控制当前buffer 页面显示哪些内容,比如只显示一级标题,显示二级标题。 下面是常用快捷键:
Table 1: 标题展开、折叠快捷键 Key 函数 说明 TAB (org-cycle) 作用于当前标题,当前标题–> 下一级子标题 –> 当前标题所有内容 S-TAB (org-global-cycle) 作用于全局标题,三级循环: 一级标题 -> 所有级别标题 -> 显示所有内容 c-u TAB 同上 c-uu TAB (org-set-startup-visibility 返回文档打开时的展示级别(初始展示级别) c-uuu TAB (outline-show-all 展开所有内容 c-cr (org-reveal) 显示当前条目、下面的标题和上面的层次结构, 主要用于Sparse Trees 和Agenda c-ck (outline-show-branches) 显示当前标题的所有子标题 c-c TAB (outline-show-children) 显示当前标题的所有下一级标题 c-cx b (org-tree-to-indirect-buffer) 将当前标题的内容在另外一个buffer 中打开 c-cx v (org-copy-visible) 将当前标题及内容复制N份,N 在minibuffer中输入 - 初始化标题显示
默认情况下,打开一个org文件,各级标题的展示级别为overview. 我们可以在每个org文档头部分通过"#+STARTUP" 来设置显示哪些内容。如:
#+STARTUP: overview #+STARTUP: content #+STARTUP: showall #+STARTUP: showeverything
1.2 基本操作
有一些快捷键可以帮我们快速的操作章节,比如展开、折叠、跳转章节、生成同级标题、调整标题级别等
KEY | 函数 | 说明 |
---|---|---|
光标移动 | ||
C-c C-n | (org-next-visible-heading) | 光标移动到下一个标题 |
C-c C-p | (org-previous-visible-heading) | 光标移动到上一个标题 |
C-c C-f | (org-forward-heading-same-level) | 光标移动到下一个同级标题 |
C-c C-b | (org-backward-heading-same-level) | 光标移动到上一个同级标题 |
C-c C-u | (outline-up-heading) | 光标移动到父级标题 |
C-c C-j | (org-goto) | 进入一下子功能,有如下操作: |
KEY | 函数 | 说明 |
---|---|---|
标题结构调整 | ||
M-RET | (org-meta-return) | 生成同级标题,或者排充标号 |
C-RET | (org-insert-heading-respect-content) | 在当前标题及内容正文生成同级标题 |
M-S-RET | (org-insert-todo-heading) | 功能同M-RET,标题前自动添加TODO字样 |
C-S-RET | (org-insert-todo-heading-respect-content) | 功能同C-RET,标题前自动添加TODO字样 |
M-LEFT | (org-do-promote) | 标题降级,比如2级标题(**)变为3极标题(***) |
M-RIGHT | (org-do-demote) | 标题升级,比如2级标题(**)升级为1级标题(*) |
M-S-LEFT | (org-promote-subtree) | 当前标题及其子标题,同步降级 |
M-S-RIGHT | (org-demote-subtree) | 当前标题及其子标题,同步升级 |
M-UP | (org-move-subtree-up) | 当前标题及其内容,与上一个同级标题互换位置 |
M-DOWN | (org-move-subtree-down) | 当前标题及其内容,与下一个同级标题互换位置 |
C-c @ | (org-mark-subtree) | 标记当前标题及其子内容 |
C-c C-x C-w | (org-cut-subtree) | 剪切当前标题及内容 |
C-c C-x M-w | (org-copy-subtree) | 复制当前标题及内容 |
C-c C-x C-y | (org-paste-subtree) | 粘贴剪切或者复制的标题及内容 |
C-y | (org-yank) | 粘贴 |
C-c C-x c | (org-clone-subtree-with-time-shift) | 紧邻当前章节下方复制N次当前章节。N在mini-buffer中提供 |
C-c C-w | (org-refile) | 移动当前标题及内容至其他一级标题下。 |
C-c ^ | (org-sort) | 标题排序,会提供几种排序方法,比如按照时间、字母、数字等 |
C-x n s | (org-narrow-to-subtree) | 当前buffer 中只显示此标题内容,隐藏其他标题内容。 |
C-x n b | (org-narrow-toblock) | 当前buffer 只显示当前block 内容,不显示其他内容。 |
block 指的是#+begin_example .. #+end_example 之类 | ||
C-x n w | (widen) | 取消 C-x n s 与 C-x n b 的特性。 |
C-c * | (org-toggle-heading) | 当前行在标题与非标题之间切换。但是切换为标题时, 不能保证 |
原标题级别 |
1.3 列表
列表是文本中一个比较常用的元素,可以列出各种待完成的事项等。 列表分为有序和无序两种,有序列表以1.或 1)开头,无序列表以+或-开头 后面,同样,后面要跟一个空格。 我们输入一个无序列表:
- 根1 - 支1 - 支2 - 根2 - 支1 - 支2
org-mode提供了一种很独特的功能,可以加入checkboxes (实际就是加入一对中间有空格的方括号[ ])标记任务的完成状况,当输入C-c时,会将该任务状态在完成与未完成之间进行切换 ,[X] 代表完成,[ ] 代表未完成 [-] 代表完成一部分,而且如果一个总任务有多个子任务, 还可以根据子任务的完成情况计算总进度(只需要在总任务后面添加一对方括号,里面加上%或/ 如[%]
,[/]
)。 下面是一个有序列表与checkboxes结合的示例
1) [-] 任务1 [33%] 1) [ ] 子任务1 2) [X] 子任务2 3) [ ] 子任务3 2) [ ] 任务2
1.4 注释
Emacs 中的注释有两种:
KEYS | 函数 | 说明 |
---|---|---|
C-c C-x d | (org-insert-drawer) | 插入一个block,里面可以写任意内容,除了标题。不可嵌套 |
这种block,被称为Drawer. 首先会要求在minibuffer中输入 | ||
Drawer name,然后回车,会在光标所在位置生成内容, | ||
格式如下: | ||
:Drawer name: | ||
:END: | ||
C-c C-z | 紧邻标题下方插入一个带时间戳的 NOTE。 |
1.5 块
org 中把#+beingxxxx … #+endxxx 的结构称为块。块可以用于各种目的,比如引用,举例,包含代码等。
在块的首行,也就是#+begin_xxxx ,按TAB键,可以展开或者合并成一行。可以通过变量org-hide-block-startup在配置文件中设置block的默认状态,也可以在每个文件的头部通过#+STARTUP:来控制打开文件时block是否展开。
#+STARTUP: hideblocks --> 合并 #+STARTUP: nohideblocks --> 展开
1.6 Footnotes
org-mode 支持编写脚注。其格式如下
[fn:name:definition]
其中 name 和 :definition ,允许有一个为空,形式以下两种写法:
[fn:name] [fn::definition]
这两种是有区别的,前者是引用而不是定义,引用的是名为"name"的脚注。后者是定义脚注,名称由org-mode自行定义。 来看下示例:
[fn:test1] --> 如果没有名为test1的脚注,在public的时候会报错:Definition not found for footnote test [fn::test] [fn:test2:test]
test22
test33
Footnotes:
Created: 2020-03-31 Tue 10:45
===================
天行健,君子以自强不息
地势坤,君子以厚德载物
===================