Frostrain's Notes

org-mode 中的表格

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: <2017-08-18>

Author: Travis CI User

Created: 2017-11-30 Thu 03:18

Emacs 24.5.1 (Org mode 8.2.10)

Validate