Table of Contents
title: org-mode 中的表格 categories: org-mode tags:
- emacs
- org-mode
1 表格
表格是 org-mode 中非常强大的功能之一
例如下面这个表格是直接用文本编写:
中foo | bar |
---|---|
文fff | bbb |
abc | def |
源代码, 不要被那些 制表符(横线和竖线) 所吓到, org-mode 有很多功能可以帮助我们快速处理表格
| 中foo | bar | |-------+-----| | 文fff | bbb | | abc | def | |
1.1 创建表格
1.1.1 手动创建表格
org-mode 中的表格使用 竖线 "|" 来作为分隔符, 两个 "|" 之间的内容自动变成 单元格的内容. 我们只要向下面这样写, org-mode 会自动将其识别为表格
| foo | bar |
这里
- 表格以 "|" 开头 (前面可以有空格), 内容与分隔符之间可以不写空格, 比如
|foo|bar
也是可以的 - 写完一行后光标放在最后一格按 TAB, org-mode 会自动为我们对齐字段并创建新行 实际上 TAB 是移动到下一个(右边的)单元格, 在最后一列时则移动到下一行
- RET 则是切换到 同一列的下一行
- 内容过长时, org-mode 还是会自动对齐, 该列的长度以最长的内容为准
- 在单元格上按
C-c C-c
可以重新自动格式化表格 - 使用
C-c -
可以在当前行的下一行插入 水平分割线
1.1.2 从选区创建表格
除了手动创建表格以外, 还有一种从 选区 创建表格的方式. 比如有一段文本
foo bar 123 456
我们可以选中这两行, 然后按 C-c |
(org-table-create-or-convert-from-region 命令), 则 org-mode 会自动将其转换为表格
foo | bar |
123 | 456 |
org-table-create-or-convert-from-region 命令可以自动将下面的字符识别为分隔符(不能混用)
- 逗号
- TAB
- 一个空格
另外有不同的 前缀 时, 这个命令有不同的作用
- 如果有 数字前缀N, 则以 N个连续空格 作为分隔符
- 如果有 一个 / 两个 前缀命令, 则以 CVS / TAB 作为分隔符
- 如果有 三个 前缀命令, 则以指定的 正则表达式 作为分隔符
1.2 常用命令
按键 | 说明 |
---|---|
C-c | | 可以根据 带有空格的n行 自动生成表格 |
C-c C-c | 自动调整当前表格(对齐边界) |
TAB | 移动到下一单元格,必要时新建一行 |
S-TAB | 移动到上一单元格 |
RET | 移动到下一行,必要时新建一行 |
M- |
移动列(两列交换位置…) |
M- |
移动行(同上) |
M-S- |
删除/插入列 |
M-S- |
删除/插入行 |
C-c - | 添加水平分割线(在当前行下面添加) |
C-c RET | 添加水平分割线并跳到下一行 |
C-c ^ | 根据当前列排序,可以选择排序方式 |
1.3 表格宽度与对齐
- 我们可以用
的形式来控制表格中某一列的宽度, n 就是显示的字符个数, 隐藏的部分会显示为 "=>" - 默认的字符串是左对齐, 数字右对齐, 我们可以用
, , 来控制对齐位置 (右, 中, 左) 则可以同时控制对齐和长度, 控制标识需要在单独一行里写 标识在 emacs 中不起作用, 但是导出为 html 时可以生效
1 | one |
2231 | two |
323123 | This is a long chunk of text |
4123123 | four |
org-table-edit-field (C-c `, 注意这里的按键是 反引号 不是 引号) 可以打开一个新 buffer 编辑表格中的内容, 一般用于编辑 没有完整显示 的表格
1.4 一些问题
下面是本人使用表格时发现的一些问题
- 中文字符 对齐 问题 由于 org-mode 有自动对齐表格的功能, 如果使用的字体不是 等宽字体 (一般一个中文字符的宽等于两个英文或英文符号), 则会出现表格中有 中文字符 时不能自动对齐的情况, 看起来会很别扭
- 表格文本的 换行 问题 单元格中不支持换行, 也就是说不允许一个单元格的内容有多行文本
- 表格中 "|" 是作为 分隔符 使用的, 如果我们要将其作为 单元格的内容 来使用, 需要输入 | 可以用 org-toggle-pretty-entities 命令将其显示为 UTF-8 字符. 实际上 表格 中也是有很多 转义字符 的, 详细见 http://orgmode.org/manual/Special-symbols.html#Special-symbols
- 换行操作
foo bar foo2 bar2 比如我想在上面的 foo2 前面插入一个换行符, 也就是变成两行:
foo bar foo2 bar2 直接使用 回车键 是不行的(会创建新行..), 需要使用 M-x newline 命令
2 链接
更详细的介绍参考 org-mode 的官方手册 http://orgmode.org/manual/index.html#toc_Tables
Date:
Created: 2017-11-30 Thu 03:18