Org mode 概要

介绍

Org mode 是一种标记语言,与 MarkdownAsciiDoc 类似,emacs 通过 org-mode 提供对这种标记语言的良好支持。

别人写的语法参考卡片 Org mode syntax quick reference card

语法

文档元数据

文档相关

#+TITLE: the title to be shown (default is the buffer name)
#+AUTHOR: the author (default taken from user-full-name)
#+DATE: a date, an Org timestamp1, or 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 …
#+BIND: lisp-var lisp-val, e.g.: org-export-latex-low-levels itemize You need to confirm using these, or configure org-export-allow-BIND
#+LINK_UP: the ‘up’ link of an exported page
#+LINK_HOME: the ‘home’ link of an exported page
#+EXPORT_SELECT_TAGS: Tags that select a tree for export
#+EXPORT_EXCLUDE_TAGS: Tags that exclude a tree from export
#+XSLT: the XSLT stylesheet used by DocBook exporter to generate FO file

例如,使用 #+TITLE: 来表示文档标题。

源代码

#+BEGIN_SRC ruby
require 'redcarpet'
md = Redcarpet.new("Hello, world.")
puts md.to_html
#+END_SRC

支持高亮的语言列表在 http://orgmode.org/worg/org-contrib/babel/languages.html

注释

# 开头的行被看作注释,不会被导出。区块注释采用如下写法:

#+BEGIN_COMMENT
块注释
...
#+END_COMMENT

表格说明及命名

可以在表格的上面加入,

#+NAME: My Target
#+CAPTION: This is the caption for the next table
| a | b | c |
| 1 | 2 | 3 |
...

#+NAME: 为引用链接,#+CPATION: 为表格说明(描述)。

包含文件

当导出文档时,你可以包含其他文件中的内容。比如,想包含你的“.emacs”文件,你可以用:

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

可选的第二个第三个参数是组织方式(例如,“quote”,“example”,或者“src”),如果是 “src”,语言用来格式化内容。组织方式是可选的,如果不给出,文本会被当作 Org 模式的正常处理。用 C-c,可以访问包含的文件。

正文标题(大纲)

* 号来表示正文中的标题,1 个 * 表示 1 级,一直最多支持 10 个 *,即 10 级。

可以为标题增加标签(tags),格式为 :标签:,如果有多个标签,标签之间以 : 分隔开,如 :标签1:标签2:。标签有继承性,下级标题会继承上级的标签。

快捷键

  • C-RET ,在后面插入一个同级标题
  • C-S-RET ,后面插入一个TODO同级标题
  • M-RET ,在下面插入一个同级标题(列表)
  • M-C-RET ,在下面插入一个 TODO 同级标题/在下面插入一个同级带复选框的列表
  • C-c *    ,将本行设为标题/正文
  • C-c C-w ,将子树或者区域移动到另一个标题下
  • C-c C-x b ,在新的buffer中显示当前分支
  • TAB ,循环折叠/展开标题(列表)
  • S-TAB ,循环切换整个文档的标题(列表)状态(三种状态:折叠、打开下一级和打开全部)
  • M-UP/DOWN ,移动标题(列表)项
  • M-LEFT/RIGHT ,升级/降级标题(列表)项

  • C-c C-n/p ,下/上一标题
  • C-c C-f/b ,下/上一标题(仅限同级标题)
  • C-c C-u ,跳到上一级标题

  • C-c C-j ,切换到大纲浏览状态

段落

段落之间需要 1 个空行,即 2 个回车符(与 Markdown 类似)。

字体

粗体 *粗体*,斜体 /斜体/,删除线 +删除线+,下划线 _下划线_,等宽字 =git,但是有一个问题是,中文一个句子中,对某些词添加效果时,不起作用。例如,这是一个*粗体*。 没有起作用,需要在 * 号前面或后面有空格才有效果。

上标下标

上标 E=mc^2,下标 H_{2}O

列表

无序列表

-+ 开头。

有序列表

1.1) 开头,序号可以一直写 1.1),导出为其他格式的文档(如 HTML、PDF 等)时,会自增。

描述列表

:: 将项和描述分开,项以 - 开头。

列表可以在其上级的名称中加 [%][/],这样能在下级列表的复选框选中后,自动计算上级的完成比。

快捷键

  • M+RET ,插入一个同级新列表项
  • M+S+RET ,插入一个带复选框的同级新列表项
  • C-c C-c ,改变复选框状态
  • C-c - ,循环改变列表类型

分隔线

以5条短线表示 -----

表格

可以用这样的语法来创建表格,会自动识别,

| name | age |
|-

在表格的行最后 age | 时,会自动创建下一行,自动创建的行与上行之间没有分隔线 |----+-----|。在 org-mode 中,一般缺省情况,只在表头和表行之间才有分隔线。在 |- 后面按 TAB 键,会自动完成该行,有行分隔线,按 C-c C-c,会根据内容自动调整表格,但对中文支持不好,对不齐。

限制列长度,可以在表头该列输入 <6>,数字为限制的字符个数。

在表格中可以输入公式计算,如 =$1+$2$ 后面的数字代表列,如果不想计算所有行,只在公式输入所在行生效,用 :=$1+$2,前面加 1 个:

快捷键

  • TAB ,在表的格子中时,会在表格中移动;在行末,自动创建下一行
  • RET ,在格子中时,会自动创建下一行,行之间没有分隔线
  • S-TAB ,在表反向移动
  • C-c | ,提示创建表格
  • M-LEFT/RIGHT ,移动列
  • M-UP/DOWN ,移动行
  • M-S-LEFT/RIGHT ,删除/插入列
  • M-S-UP/DOWN ,删除/插入行
  • C-c - ,插入行分隔线
  • C-c RET ,添加水平分割线并跳到下一行
  • C-C ^ ,排序,注意不排序表头
  • C-u C-c C-c ,重新计算整个表格
  • C-c `      ,在另外一个 buffer 中显示未完全显示的内容

脚注

定义脚注的语法为 [fn:1] this is 一个脚注。,可以定在文档的任意位置。用 引用这个[fn:1]脚注 的方式来在文档中任意位置引用脚注,导出为其他格式的文档时,脚注定义会显示在文档的最后面。

链接

外部链接

Org 支持的链接格式包括文件、网页、新闻组、BBDB 数据库项、IRC 会话和记录。外部链接是 URL 格式的定位器。以识别符开头,后面跟着一个冒号,冒号后面不能有空格。资源也可以位于本地,如图片、文件等。语法为 [[链接地址][链接内容]],如,

[[http://orgmode.org/orgguide.pdf][grgguid.pdf]]] 
[[file:/home/maple/图片/test.jpg][a picture]]

也可以去掉标签,

[[file:/home/maple/图片/test.jpg]]

内部链接

[[标题文字或#属性]]

快捷键

C-c C-l,编辑光标所在的链接

导出为其他格式的文档

快捷键

  • C-c C-e h o,导出为 HTML 文档标
  • C-c C-e l p,导出为 PDF 文档

HTML 模板

当导出为 HTML 文档格式时,缺省的外观比较简洁,可以装饰一下。按照这个链接 https://github.com/fniessen/org-html-themes 来设置

使用 Bootstrap 的模板 https://github.com/marsmining/ox-twbs

工程定义

(setq org-publish-project-alist
      '(("org-notes"
        :base-directory "~/org/"
        :publishing-directory "~/public_html/"
        :publishing-function org-html-publish-to-html
        :with-sub-superscript nil
        )))

上面的代码定义了一个 org mode 文档工程的相关信息。可以一次性生成该工程的所有 org 文件。命令为 C-c C-e P p。