level 1
level 2
level 3
-
level 4
- abc level 5
使用 TAB 来打开或者折叠
Shift TAB 可以在展开所有折叠 展开当前光标处的折叠和折叠所有之间切换
使用 zc 来折叠当前光标及它的子代码
使用 zo 来打开折叠
使用 zM 来折叠所有
使用 zR 来展开所有
Getting start on org mode
读 org 手册: M-x org info
转换文字和标题 : SPC m h
转换文字和列表 : SPC m i
- item 1
- item 2
- item 3
abc
ccd
*
Motion
移动光标使用 h/j/k/l
(同级别的标题移动) 移动到上一个标题/下一个标题 => gk/gj OR C-k C-j
移动到父标题 => gh
Structure Editing (M即 Meta Windows: Alt MAC: option)
在上方插入新的标题 -> Shift + Ctrl + Enter
在下方插入新的标题 -> C-Enter
使当前标题升级或者降级 -> M-h/l OR M-Left/Right(方向键左右)
使当前标题及其以下的所有内容升级或者降级 -> M-S-h/l OR M-S-Left/Right(方向键左右)
abc
上下移动当前标题(下面的内容跟着移动) -> M-j/k OR M-Up/Down
cc
- dd
上下移动当前标题(不包含其下面的内容) -> M-S-j/k OR M-S-Up/Down
Some advanced edditing thanks to Evil Mode
选择当前元素及其所有内容 -> vae
删除当前元素及所有内容 -> dae
选择当前元素及其所有内容 -> vaR
删除当前元素及所有内容 -> daR
Insert Snippets
SPC-i-s
bang -> #!/usr/bin/env bash
current time -> Sat May 2 17:11:28 2020
TODO
TODO example one
TODO example two
TODO 把TODO 替换成列表中的东西 : S-LEFT/RIGHT (列表如下 TODO PROJ STRT WAIT HOLD DONE KILL [] [-] [?] [X] 空)
TODO 指定 TODO 的state: SPC-m-t
Data/Deadline
进入以下界面后可通过 Shift + 方向键来调整日期 月份界面的切换可鼠标点击 < >
插入日历 SPC-m-d-s OR M-x org schedule
插入 Deadline SPC-m-d-d
To Create a checkbox : - [1/4]
[25%]
- a
- [-] b
- c
- C-c C-c OR Enter 来切换 checkbox 的状态
在 checkbox 的 父元素上输入 [/]
或者 [%]
当 checkbox状态改变时 [/]
里面会显示 checkbox 的选中情况 [%]
会显示选中百分比
move this file to front of agenda: C-c-[
org agenda : SPC-o-a
Table
Create a Table
输入 |name|age|phone| 然后 SPC-m-b– org-table-insert-hline 即可插入头部 即 |—-—-—|这些内容 然后 C-Enter 就可以为表格增加行了
name | age | phone |
---|---|---|
abcdefdfa | abceee | phone |
aaaa | ||
1 | abck |
插入 hline 方式2
在表格下一行输入 |-
然后按 TAB ( 注意不是自动补全 如果触发了自动补全 就按个空格再回退回来再TAB )
插入 hline 方式3
C-c -
(org-ctrl-c-minus)
通过 TAB 键移动光标至下一个单元
Table Motion
快捷键 | 说明 |
---|---|
TAB | 切换到下一个单元格,如已是最后一个单元格,则新建一行并跳到该行第一个单元格 |
M-S-right | 在当前列前插入一列 |
M-S-left | 删除当前列 |
M-S-down | 在当前行前插入一行 |
M-S-up | 删除当前行 |
C-m | 移动到下一行,或新建一行 |
M-up/M-down | 将当前行往上/下移动 |
M-left/M-right | 将当前列往左/右移动 |
C-c ` | 编辑当前单元格 |
C-c C-x C-w | 剪切某个区域的表格内容 |
C-c C-x C-y | 拷贝复制的内容到表格 |
S-return | 当单元格无内容时,将其上方第一个非空内容拷贝过来;否则拷贝当前内容到下一行并随之移动 |
C-c C-c | 强制表格重新排列 |
C-c ^ | 表格排序 |
当前行上移一行 -> M-k/Up
当前行下移一行 -> M-j/Down
当前列左移一列 -> M-h/LEFT
当前列右移一列 -> M-l/Right
当前列左边插入新列 -> M-S-l
删除当前列 -> M-S-h
当前行上边插入新行 -> M-S-j
删除当前行 -> M-S-k
Shift-Enter
如果光标处的单元为空则把光标处上一行表格对应的内容复制到该光标处
如果光标处的单元不为空则把光标处的内容复制到下一行对应光标处
表格公式
Org mode 中的表格的另外一个强大之处,在于它支持公式。在表格区域使用快捷键 “C-c ‘",就可以对表格公式进行编辑,完成后公式会显示在表格下方,以 “#+TBLFM:” 开头,如下图所示。
使用 “C-c ‘” 后能在一个独立的、临时的 buffer 中编辑公式,但我们也可以在表格下方手工添加以 “+TBLFM:” 开头的行,然后直接添加公式。
上面这个公式表示将第四列的值设为第二列的值与第三列的值的乘积。在编辑好公式并保存后,将光标移动到公式所在行然后使用 “C-c C-c”,就可以应用公式到表格中。如下图所示:
在Org mode的表格公式中,用 “@” 来表示行,用 “$” 来表示列,最简单的,"@3$2” 表示的是第三行第二列的位置。
使用快捷键 “C-c }” 可以开启表格的横纵坐标显示——若要关闭的话也是用它。如果是用 “C-c ‘” 来进行公式编辑,在输入表格位置时,会看到表格上对应的位置会在当时高亮,所以建议用这种方式进行编辑。
如果只给一个坐标,则另一个坐标会被设为"当前行"或者"当前列",这在批量处理表格内容时会有用。
如果想表示一个区域的话,用 “..” 来表示。
下面这个表示左上角为第二行第一列单元格、右下角为第四行第三列单元格的区域,共包含 9 个单元格。
|
|
下面这个则表示"当前行"的第一列到第三列的区域:
|
|
在公式中,可以用 “@#” 表示当前行的行号,用 “$#” 表示当前列的列号,在一些稍复杂点的公式里会有用。
此外,还可以定义常量、变量,或者给某个单元格命名,然后引用它们。假设其名字为 “name”,那么 “$name” 就可以引用它了。
常量的定义可以通过 “org-table-formula-constants” 来进行,这样定义的常量是全局的;如果要定义局部的常量,可以在org文件中添加诸如这样的行:
|
|
还可以在当前表格引用其他表格的域,这需要其他表格被命名为某个名字,
如"FOO",我们要在另一个表格中使用其第三行第四列的域,将其值赋给当前表格的第五行第二列,则可以这样写:
|
|
下图将被命名为 “fruit_expend” 的表格的第 6 行第 4 列的数据插入到新表格的第二行第二列中:
Org mode 的表格公式中,四则运算符都能正常使用,不过略有不同—— 乘号 "*" 的优先级要比除号 "/" 要高
,因此
|
|
会被解释为
|
|
Org mode 默认使用的是 Emacs 中自带的 Calc 这个 package 来进行计算,而 Calc 中提供了相当丰富的计算方法,这里列举一二:
- 基础算术方法: abs, sign, inv, sqrt, min, max,详见 Arithmetic Functions
- 对数方法: ln, exp, log,详见 Logarithmic Functions
- 三角函数: sin, cos, tahn,详见 Trigonometric/Hyperbolic Functions
- 随机数方法: random
- 向量/矩阵方法: vunion, vint, vsum, vmean, vmax, vmin, vmedian,详见 Vector/Matrix Functions
Calc 的内容比较多,这里不做深入展开,有需要的话可以参考 GNU Emacs Calc Manual。
此外,表格公式还能以 Emacs Lisp 的形式来进行编写,不过要在这种形式的公式前加上单引号 “’",才能正确求值。在 Emacs Lisp 形式的公式表达式中,传入的参数会被当作字符串,所有需要用格式化选项 “N” 来指明参数类型都是数值。
如下图,在不加格式化选项时,公式计算出错,加上 “;N
” 后才得到了正确的结果。
所有的格式化选项,必须通过分号 “;” 和公式进行分隔并跟随在公式后面,可用的选项有:
-
p: 设置计算精度
-
n/s/e/f: 设置结果的输出格式
- n3: 输出结果为3位有效数字(1.45)
- s3: 输出结果为科学计数法,3位有效数字(1.45e0)
- e3: 输出结果为工程计数法,3位有效数字(0.145e1)
- f3: 输出结果精确至小数点后3位
-
D/R: 计算时使用角度制还是弧度制(如三角函数)
-
F/S: 分数还是符号(当为 S 时,若结果不为整数,则显示式子本身,如: sqrt(6))
-
T/t: 时间计算,要求用于计算的值是"HH:MM[:SS]“的形式,当使用 T 时,输出结果是 “HH:MM:SS” 形式;使用 “t” 时,结果显示为一个数值,默认情况下单位是小时,可以通过变量 org-table-duration-custome-format 来设置
-
E: 不使用时,所有空白单元格都会被跳过,不会包含在计算过程中;当使用时,如果还使用了 N ,则用 “0” 填充;否则,在普通公式中,用 “nan” 填充,在 emacs lisp 公式中,用空字符串填充
-
N: 使用时,将所有域的值视为数字,对于非数值型,用 0 替代
-
L: 只用于 emacs lisp 公式,后续
如果需要对表格公式的求值进行调试,可以通过快捷键"C-c {“来开启调试模式(或者关闭它)。
配合Source block 使用
Org mode 中的表格数据是可以作为变量传递到 source block 中的,如下图所示:
如上图所示,要将表格数据传递给 source block ,需要两个步骤
- 用 “#+NAME” 将表格命名为 “xxx”
- 在 source block 的选项中,用 “:var tbl_data=xxx” 将表格数据赋值给变量 “tbl_data”
对于下面这个表格,我可以可以用这个方法将数据传递给 source block ,然后用 matplotlib 来绘制图像。
Sede | Max cites | H-index |
---|---|---|
Chile | 257.72 | 21.39 |
Leeds | 165.77 | 19.68 |
Sao Paolo | 71.00 | 11.50 |
Stockholm | 134.19 | 14.33 |
Morelia | 257.56 | 17.67 |
相应的 source block 为
|
|
中英文混排时 表格会不对齐 解决办法如下:
-
下载安装 更纱字体
https://github.com/be5invis/Sarasa-Gothic/releases 下载ttf字体 然后解压出来安装1 2
我们只需要安装等距更纱字体即可 因为下载下来的字体有很多 为了确定哪个才是等距更纱字体 可以把鼠标移到字体上悬停片刻就会显示字体的标题了
在等距更纱字体上右键安装即可
-
在 ~/doom-emacs-cfg/config.el 中加入以下内容
1 2 3 4 5 6 7 8 9
(after! org ;; org mode 中英文混排问题 (defun org-buffer-face-mode-variable () (interactive) (make-face 'width-font-face) (set-face-attribute 'width-font-face nil :font "等距更纱黑体 SC 16") (setq buffer-face-mode-face 'width-font-face) (buffer-face-mode)) (add-hook 'org-mode-hook 'org-buffer-face-mode-variable))
-
重启emacs生效
该方法只在org mode中使用等距更纱字体 并不影响其它地方
-
:@ 注意部分主题不能使表格对齐如 tango
表格导出HTML
|
|
原因是导出成HTML 的时候 导出程序自动把中英文之间的空格删掉 这就导致了表格不对齐
下面的表格就不能正确导出:
原因是在 size 行的即A 多少 K 大小那里在导出时会删掉4 个空格导致其后的 | 不能对齐 解决办法是在 | 前面加4 个空格
:@ 注意: 每一行的 + 和 | 对齐才能正确导出HTML
Link
手动插入链接
在 + [[]] 两个中括号中输入要跳转到的唯一标题处即可自动识别建立链接
SPC 插入链接
SPC+m+l+l 即选择插入的链接类型然后添加描述
e.g : elisp -> (+ 1 2) -> want to know (+ 1 2) 效果如下:
want to know (+ 1 2)
e.g : shell -> ls *.org -> list org 效果如下:
list org
跨文件插入 LINK
基于 headline
- 在文件1 中的headline 上 SPC m l s
即调用org-store-link
把headline 存储为一个link 供别处调用
- 在文件2 中 SPC m l S
即调用org-insert-last-stored-link
在当前位置指向最后存储的link 位置
基于文件
- 在文件1 中的
选中一段文字
后 SPC m l i 输入 file 回车后选择文件
blog
或者直接手动输入[[file:xxx.org][文件跳转]]
emojify
:heart:
:relaxed:
导出
- 导出 HTML
C-c C-e h o/h - 导出 PDF
C-c C-e h o 会在浏览器打开 html 这时- Windwos:
Ctrl + p 打印 PDF - MAC
Cmd + p 另存为 PDF
- Windwos:
修饰
配置 (setq org-hide-emphasis-markers t) 可以在 Org 里面直接看到修饰效果
-
粗体
ABC
-
斜体
ABC
-
下划线
ABC
-
清除线
ABC -
代码
ABC
-
不使用转义字符
A~!@#$%^&*()<>?* * BC
Special edit mode 模式
在特定的代码段按 C-'
会进入 org-edit-special
如在 babel 里会根据语言来进入一个minibuffer 这个bubffer 的模式会设为当前语言的模式
在里面可以享受所有的该模式下的代码补全代码高亮和 snippet
|
|
预览Latex
环境搭建参考 : /p/org-%E9%80%9A%E8%BF%87latex%E5%AF%BC%E5%87%BA-pdf/
\begin{equation} \left \{ \begin{aligned} 0 &= i_{a} + i_{b} + i_{c} \\ i_{\alpha} &= i_{a} \\ i_{\beta} &= \frac{\sqrt{3}}{3} \left( 2 i_{b} + i_{a} \right) \notag \end{aligned} \end{equation}
如果一切顺利的话按回车 或者 C-c C-x C-l
或者 org-latex-preview 就可以看到结果了
默认是按 scale 为 1.5 来预览 在Windows 下可能会觉得太小 想改大的话用
|
|
:@ 注意: 改变 scale 如果 org 中有加入了 minted 修饰的话很有可能会导致 预览失败
查看 log 会得到以下信息
|
|
只要把 #+LATEX_HEADER: \usepackage{minted}
注释掉再重开org 文件即可
minted 是在导出成PDF 时代码高亮和代码对齐时用的 在导出成PDF 时再打开这个修饰即可
如果想一劳永逸 可以在 org 里加上修饰
#+STARTUP: latexpreview
这样重新打开 buffer 就可以看到预览效果了 但是这个预览后就看不到latex 源码了只有注释掉
#+STARTUP: latexpreview
才可行
或者用我自己写的函数来切换org 里的latex 预览状态
|
|
用Latex 导出PDF
图片
图片导出到PDF 时指定图片大小用
#+ATTR_latex: :width .5\linewidth
其中 .5\linewidth
即是宽度的0.5 倍
如果不想手动去每张图片都去修改的话可以用我写的函数来根据org 的设置来批量修改
|
|
表格
如果org 里有大表格 导出成 pdf 的时候会有问题需要做如下调整
用 #+LaTeX: \resizebox{\textwidth}{!}{ xxxx #+LaTeX: }
把表格包起来如:
|
|
页眉页脚 LOGO
|
|
导出
导出设置参考 /p/org-%E9%80%9A%E8%BF%87latex%E5%AF%BC%E5%87%BA-pdf/