org-mode学习笔记


头信息注释


#+TAGS: { 桌面(d) 服务器(s) }  编辑器(e) 浏览器(f) 多媒体(m) 压缩(z)
#+TAGS:  { @Windows(w)  @Linux(l) }  
#+TAGS:  { 糟糕(1) 凑合(2) 不错(3) 很好(4) 极品(5) } 
#+SEQ_TODO: TODO(T) WAIT(W) | DONE(D!) CANCELED(C@) 
#+COLUMNS: %10ITEM  %10PRIORITY %15TODO %65TAGS

  1. 启动时概览
  2. 设定标签,括弧中的为标签快捷键(如果没有指定,默认为首字母)。可以设置在多行中
  3. 花括号为标签组,组中的标签只能选一个
  4. 设定待办状态。将项设置为 | 后面的状态时(DONE CANCELED),会打上 CLOSED 标志
  5. 设定列视图
  6. 更新了参数后在参数区域按C-c C-c进行更新


这里的内容可以随时更改,但是要记得在改后用 C-c C-c 刷新设置


安装最新的org

http://orgmode.org/org-mode-download.html
下载最新的org版本,然后解压到home的emacs目录,在.emacs中添加load-path。
(require ‘org)
然后可以使用org-version查看版本号。


文档结构相关的操作

Motion

向前向后
同级C-c C-fC-c C-b
跨级C-c C-nC-c C-p
上一级C-c C-u
跳转C-c C-j


C-c C-j org-goto 这个功能强大,随意跳转
S-TAB 收起所有目录树,相当与C-u TAB

headline结构移动

M-left,right 移动一级
M-S-left,righ subtree移动一级
M-S-up,down subtree上下移动一级
C-c C-x C-w kill subtree

Structure editing

M-RET 添加同级head
M-S-RET 插入TODO
M-LEFT,RIGHT,UP,DOWN 上下左右调级

Sparse Tree

C-/ 搜索关键字,折叠其他所有,只显示关心内容
C-/ r
M-g M-n 在结果中跳转
M-g M-p

List


-,+,*
1.
1)
:: 添加描述
在list中同样支持类似header中的motion快捷键
注意一定后边要有个空格

Footnotes

C-c C-x f 自动在此处添加脚注,再按一次就可以回到刚才的地方


Footnotes:

1 这是一个脚注,fn是必须的
还有一些快捷键,进行脚注的跳转。

  • TODO 以后进行扩充


1 测试一个脚注测试

加粗


*name*
/斜体/
_下划线_

链接

C-c C-l 添加一个链接


[[链接地址][链接名称]]
[[链接地址]]
如果想修改这个链接,在链接后按下 backspace。


在一个链接上按=C-c C-o=即可访问,至于调用什么程序访问,取决于链接的内容

内部链接 Internal Link

如下命令定义了一个名为target的跳转目标:


#<<target>>
如下方式可以设置到target的链接:


[[target]] 或 [[target][description]]
其他常用链接命令
C-c l 可以在光标所在处创建一个跳转目标点,
在需要跳转至该目标的位置输入命令 C-c C-l 可以建立到目标的链接


当输入 C-c C-l 命令,光标若处在已经存在的一个链接上的时候,可以编辑改链接。

添加附件

给文档添加附件非常简单 C-c C-a 然后就着菜单选好了,其中 C-c C-a a 是添加文件系统中的文件作为附件。

TABLES

在table中按TAB,跳到下一个table
在tab中按RET,跳到下一行
C-c C-c 整理格式


|- 开始的行TAB后扩充为分隔栏


C-c | 自动把一个空格排列的字段转化为表格


C-c RET 创建下一行表格
C-c - 在下一行插入一行分隔符
C-c ^ 按当前列排序


表格宽度

在一列中添加<n>
如果一行显示不完全会显示为==>
此时通过 C-c ` 进入编辑默认, C-c C-c 编辑完毕。
还可以添加左中右对齐。
l,c,r
比如:
<r10>


行列操作

M-上下左右
M-S-上下左右


表格计算

比较复杂,而且不常用,用得时候再说,还可以使用Org-Plot进行画图


tag

使用冒号扩起来,在headline后边。 :tag1:
快捷键: C-c C-q
如果光标在headline行,则可以直接使用 C-c C-c


search
C-c \ 或者 C-c / m
C-c a m 全局搜索


C-c \ 搜索标签
C-c / T
C-u C-c \ 搜索带 TODO 的标签
可以使用逻辑表达式限制条件,更准确灵活的搜索



+       和      a+b     同时有这两个标签
-       排除    a-b     有 a 但没有 b
|       或      a|b     有 a 或者有 b
&       和      a&b     同时有 a 和 b,可以用“+”替代
在查询视图中 C-c C-c 退出


code

语法:


#+NAME: <name>
#+BEGIN_SRC <language> <switches> <header arguments>
<body>
#+END_SRC
引用文字 #+BEGIN_EXAMPLE/#+END_EXAMPLE
为了保留引文的格式,还可以使用
#+BEGIN_VERSE/#+END_VERSE
#+BEGIN_QUOTE/#+END_QUOTE
将引文居中排版可以使用
#+BEGIN_CENTER/#+END_CENTER


例子:


(defun org-xor (a b)
"Exclusive or."
(if a (not b) b))
输入<e和TAB,得到


#+end_example
输入<s和TAB,得到
#+begin_example
        #+begin_src
        #+end_src
咳,相应的还有:


("s" "#+begin_src ?\n\n#+end_src" "<src lang=\"?\">\n\n</src>")
("e" "#+begin_example\n?\n#+end_example" "<example>\n?\n</example>")
("q" "#+begin_quote\n?\n#+end_quote" "<quote>\n?\n</quote>")
("v" "#+begin_verse\n?\n#+end_verse" "<verse>\n?\n/verse>")
("c" "#+begin_center\n?\n#+end_center" "<center>\n?\n/center>")
("l" "#+begin_latex\n?\n#+end_latex" "<literal style=\"latex\">\n?\n</literal>")
("L" "#+latex: " "<literal style=\"latex\">?</literal>")
("h" "#+begin_html\n?\n#+end_html" "<literal style=\"html\">\n?\n</literal>")
("H" "#+html: " "<literal style=\"html\">?</literal>")
("a" "#+begin_ascii\n?\n#+end_ascii")
("A" "#+ascii: ")
("i" "#+include %file ?" "<include file=%file markup=\"?\">"))
这些都是定义在org-structure-template-alist中的变量。


定义快捷插入操作


(define-skeleton iexp 
  "Input #+BEGIN_EXAMPLE #+END_EXAMPLE in org-mode"
  ""
  "#+BEGIN_EXAMPLE\n"
  _ "\n" 
  "#+END_EXAMPLE"
  )
(define-abbrev org-mode-abbrev-table "iexp" "" 'iexp)
如果你想插入代码片段,直接M-x iexp RET即可,
会自动出现#+BEGIN_EXAMPLE #+END_EXAMPLE,并且光标自动停留在中间等待你的输入,
如果文章中已经有了一段内容,直接选中这段内容, M-x iexp RET ,同样可以将这段内容引用起来,非常方便.


貌似使用等号也是有这个作用,用在行内,比如 这样



TODO使用

任何headline前加上TODO都可以变为TODO item
C-c C-t 循环变化TODO的状态
C-c / t 在sparse tree中查看TODO
C-c a t 显示aganda全局TODO


设置多个状态,并添加简写,可以使用 C-c C-t + brief 直接设置状态


(setq org-todo-keywords
'((sequence "TODO(t)" "|" "DONE(d)")
(sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
(sequence "|" "CANCELED(c)")))
C-u C-c C-t 手动输入 TODO 状态,如果设定快捷则使用快捷键输入
S-right 循环切换 TODO 状态,两个以上 TODO 状态时使用
S-left
C-S-right 组间切换
C-S-left
C-c C-v 查询视图
C-c / t
C-c a t 全局 TODO 列表


TODO依赖关系

父级TODO只有等子TODO都done后才能done
例子: 添加ORDERED属性,subclass也是按照先后顺序执行



* Parent
:PROPERTIES:
:END:
**TODO a
**TODO b, needs to wait for (a)
**TODO c, needs to wait for (a) and (b)

tracking todo state change

This is achieved by adding special markers ‘!’(for a timestamp)
or ‘@’ (for a note with timestamp) in parentheses after each keyword.


exp:
(setq org-todo-keywords
’((sequence “TODO(t)” “WAIT(w@/!)” “|” “DONE(d!)” “CANCELED(c@)”)))


priotify

在headline添加priority cookie
*** TODO [#A] Write letter to Sam Fortune
A,B,C
不写priority cookie的headline默认为B
=C-c ,= 设置优先级
S-up,down 调高低


对于显示效果还要设置:
org-priority-faces


checkbox

每行以- [ ] 开头,就是checkbox,注意[ ]之间必须有空格
实际上是列表,所有要加- + 或者*在[ ]之前


但checkbox不加入global todo list。
试用于把一个任务分成若干个小项。
C-c C-c toggle checkbox
C-u C-c C-c 在list符后添加一个空的checkbox或者删除
C-u C-u C-c C-c 把checkbox设置为中间状态[-]
还headline后添加[/]或者[%] 可以显示当前项完成的个数或者百分比。


org capture

用于快速记录一些想法,可以设置一些模板。


(setq org-directory "~/lwemacs/org")
(setq org-default-notes-file (concat org-directory "/notes.org"))
(global-set-key "\C-cc" 'org-capture)
C-c C-c 完成编辑
C-c C-k 放弃编辑
C-u C-c c 查看模板,或者定制模板
C-u C-u C-c c 查看last note


添加模板,设置org-capture-templates变量:


(setq org-capture-templates
 '(("t" "Todo" entry (file+headline (concat org-directory "/gtd.org") "Tasks")
        "* TODO %?\n %i\n %a")
   ("j" "Journal" entry (file+datetree (concat org-directory "/journal.org"))
        "* %?\nEntered on %U\n %i\n %a")))  
要学习模板的格式,查看org-capture-templates变量描述。


exports

设置如下tag可以控制导出和不导出的headline
(:export:) and ‘(:noexport:)


export option

放在文章的任何位置都可以
C-c C-e t 插入option模板


最好把统一的配置放在一个独立的文件中,然后进行引用
#+SETUPFILE


其中OPTIONS字段是最重要的,有很多选项:
C-c C-e 开始export命令,org-export,然后会提示导出什么格式。
注意,一定要加上\n:t, 导出的时候加入回行,否则都会显示为一行


防止下横杠被转义

关闭这个功能


也可以直接在配置文件中
(setq org-export-with-sub-superscripts nil)


或者只对某个site配置生效,在site的属性中添加
:sub-superscript nil

export html

org-export-html-postamble 默认此变量时true,会往结尾添加一些作者信息。
css相关:
org-export-html-style 或者
view:
info Info-like interface with one section per page.
overview Folding interface, initially showing only top-level.
content Folding interface, starting with all headlines visible.
showall Folding interface, all headlines and text visible.


遇到的问题:
使用了org-info.js,但是运行不成功,原因是只要页面出现加载错误,js就无法运行。
我的问题是sitemap.html写错了,无法加载,所以info.js没有效果,修改后正常了。

export pdf

apt install letex-recommend 结果还是导出失败。以后再搞吧。
有可能是版本的问题, 网上说要用最新的。我用的org才6.3版本。
解决了问题:需要安装一些包。
texlive-fonts-recommended, texlive-fonts-recommended, texlive-latex-extra


LaTeX Error: File `marvosym.sty’ not found. solution: apt-get install texlive-fonts-recommended
LaTeX Error: File `fullpage.sty’ not found. solution: apt-get install texlive-latex-extra
LaTeX Error: File `multibib.sty’ not found. solution: apt-get install texlive-bibtex-extra
LaTeX Error: File `algorithm.sty’ not found. solution: apt-get install texlive-science


中文问题:
安装texlive-xetex,这样就会有xelatex了。
暂时放弃,太费劲了,有空参考一下:
http://orgmode.org/worg/org-contrib/babel/examples/article-class.html
用 org-mode 写 LaTeX
http://www.cnblogs.com/visayafan/archive/2012/06/16/2552023.html
我这里生成不了org-article.cls?
这是从org-article中提取代码,org-babel-tangle总是执行失败。

使用org-jekyll导出

在一个headline上添加:blog:的tag和on的属性
然后执行:
org-jekyll-export-blog

dates and times

M-x org-time-
C-c . 创建时间, 还可以添加C-u前缀,可以插入当前时间,默认只是日期
C-c C-d 插入deadline
C-c C-s 插入Schedule
C-c ! 插入非激活的时间戳,并不激活到agenda
C-u C-c . 插入date+time
C-c C-o 访问agenda在这个时间点
S-up,down,left,right 调整当前j时间戳



M-x org-clock-
C-c C-x C-i clock in,一个工作的开始计时
C-c C-x C-o clock out

属性

在headline的下一行输入:
C-c C-x p 添加属性
在属性栏上
C-c C-c 弹出属性的action,可以添加删除


属性的搜索
c-c \ 搜索属性

未分类

C-c C-x b 在一个新缓冲区中显示当前分支
5个或以上的“-”是一个水平分割符。

byte-recompile-directory

编译整个目录el
C-u 0 M-x byte-recompile-directory


will compile all the .el files in the directory and in all subdirectories below.


The C-u 0 part is to make it not ask about every .el file that does not have a .elc counterpart.


emacs -batch -f batch-byte-compile <filename>
e.g.: emacs -batch -f batch-byte-compile *.el
简单解释一下,-batch=–batch 不打开交互界面(emacs窗口),-f=–funcall 执行一个函数,后面跟的就是函数: batch-byte-compile 编译成字节码。


给大家补充一点编译知识:
lisp是函数式语言,它的程序不能编译成可执行程序独立执行,只能通过解释器解释执行。
所以emacs只能将.el文件字节编译,编译后的目标代码其实还是源程序,只是用字节码的方式存储,而且在字节编译的过程中进行了语法检查,所以可以提高执行效率。

问题

1.如果自动添加下一级head,如在lev1中回车后添加lev2,而M-RET添加的是同级的?


2.C-c | 转换的表格对不齐,不知如何对其?
主要是中文宽度的问题。


3.如果添加不让org解析的字段?

参考资料