3.5.8 Editing and debugging formulas

可以在迷你缓冲区或直接在字段中编辑单个公式。Org 也可以打开专用缓冲区,显示表格所有生效公式。提供公式编辑时,Org 会尽可能将引用转为标准格式(如 ‘B3’ 或 ‘D&’ )。如果希望只使用内部格式(如 ‘@3$2’ 或 ‘$4’ ),可配置变量 org-table-use-standard-references

C-c =C-u C-c = (org-table-eval-formula)

在迷你缓冲区中编辑当前列/字段关联的公式。详见 Column formulasField and range formulas

C-u C-u C-c = (org-table-eval-formula)

将当前生效公式(字段公式或列公式)重新插入当前字段,可直接在字段内编辑。相比迷你缓冲区编辑,优势是可以使用 C-c ? 命令。

C-c ? (org-table-field-info)

在表格字段中编辑公式时,高亮光标所在引用指向的字段。

C-c } (org-table-toggle-coordinate-overlays)

通过覆盖层开关表格行号和列号的显示。表格对齐时会自动更新,也可通过 C-c C-c 强制刷新。

C-c { (org-table-toggle-formula-debugger)

开关公式调试器。详见下文。

C-c ' (org-table-edit-formulas)

在专用缓冲区中编辑当前表格的所有公式,每行显示一个公式。如果当前字段有生效公式,公式编辑器光标会定位到该公式。在专用缓冲区中,Org 会自动高亮光标所在的字段或范围引用。可编辑、删除、添加公式,并使用以下命令:

C-c C-c or C-x C-s (org-table-fedit-finish)

退出公式编辑器并保存修改后的公式。带 C-u 前缀时,会同时将新公式应用到整个表格。

C-c C-q (org-table-fedit-abort)

退出公式编辑器且不应用修改。

C-c C-r (org-table-fedit-toggle-ref-type)

在公式编辑器中切换所有引用的显示格式,在标准格式(如 ‘B3’ )和内部格式(如 ‘@3$2’ )之间切换。

TAB (org-table-fedit-lisp-indent)

对光标所在的 Lisp 公式进行美化打印或缩进。当行内包含 Lisp 公式时,按 Emacs Lisp 规则格式化。再次按下 TAB 会将公式折叠回去。展开的公式中,TAB 会像在 Emacs Lisp 模式中一样重新缩进。

M-TAB (lisp-complete-symbol)

补全 Lisp 符号,与 Emacs Lisp 模式一致。

S-UP, S-DOWN, S-LEFT, S-RIGHT

移动光标所在的引用。例如引用为 ‘B3’ 时按下 S-RIGHT,会变为 ‘C3’ 。相对引用和分隔线引用同样适用。

M-S-UP (org-table-fedit-line-up)

在 Org 缓冲区中将列公式的测试行上移。

M-S-DOWN (org-table-fedit-line-down)

在 Org 缓冲区中将列公式的测试行下移。

M-UP (org-table-fedit-scroll-up)

向上滚动显示表格的窗口。

M-DOWN (org-table-fedit-scroll-down)

向下滚动显示表格的窗口。

C-c }

开关表格中的坐标网格显示。

将表格字段置空并不会删除该字段关联的公式,因为公式保存在独立的 ‘TBLFM’ 关键字行中。下次重新计算时,字段会再次被填充。要删除字段的公式,需要在提示输入公式时给出空值,或直接编辑 ‘TBLFM’ 关键字。

可以直接编辑 ‘TBLFM’ 关键字,并在该行按下 C-c C-c 或使用表格常规重计算命令重新应用修改后的等式。

Using multiple ‘TBLFM’ lines

可以临时应用某个公式。在需要切换表格应用的公式时非常实用。在表格下方放置多个 ‘TBLFM’ 关键字,然后在对应公式行按下 C-c C-c 即可应用。示例如下:

| x | y |
|---+---|
| 1 |   |
| 2 |   |
#+TBLFM: $2=$1*1
#+TBLFM: $2=$1*2

在 ‘#+TBLFM: $2=$1*2’ 行按下 C-c C-c 后结果为:

| x | y |
|---+---|
| 1 | 2 |
| 2 | 4 |
#+TBLFM: $2=$1*1
#+TBLFM: $2=$1*2

如果使用 C-u C-c * 重计算表格,只会应用第一个 ‘TBLFM’ 关键字,结果如下:

| x | y |
|---+---|
| 1 | 1 |
| 2 | 2 |
#+TBLFM: $2=$1*1
#+TBLFM: $2=$1*2

Debugging formulas

当公式求值出错时,字段内容会变为字符串 ‘#ERROR’ 。如果希望查看变量替换和计算过程以排查错误,可以在表格菜单中开启公式调试,然后重新计算,例如在字段中按下 C-u C-u C-c = RET,会显示详细信息。