3.5.10 Advanced features

如果希望字段自动重计算,或为字段和列指定 名称23,需要将表格第一列预留为特殊标记字符。

C-# (org-table-rotate-recalc-marks)

将第一列的计算标记在 ‘#’ 、 ‘*’ 、 ‘!’ 、 ‘$’ 之间循环切换。若有选中区域,则修改区域内所有标记。

以下示例表格用于统计学生考试成绩,并使用了这些功能:

|---+---------+--------+--------+--------+-------+------|
|   | Student | Prob 1 | Prob 2 | Prob 3 | Total | Note |
|---+---------+--------+--------+--------+-------+------|
| ! |         |     P1 |     P2 |     P3 |   Tot |      |
| # | Maximum |     10 |     15 |     25 |    50 | 10.0 |
| ^ |         |     m1 |     m2 |     m3 |    mt |      |
|---+---------+--------+--------+--------+-------+------|
| # | Peter   |     10 |      8 |     23 |    41 |  8.2 |
| # | Sam     |      2 |      4 |      3 |     9 |  1.8 |
|---+---------+--------+--------+--------+-------+------|
|   | Average |        |        |        |  25.0 |      |
| ^ |         |        |        |        |    at |      |
| $ | max=50  |        |        |        |       |      |
|---+---------+--------+--------+--------+-------+------|
#+TBLFM: $6=vsum($P1..$P3)::$7=10*$Tot/$max;%.1f::$at=vmean(@-II..@-I);%.1f

Important: 注意,对于此类特殊表格,使用 C-u C-c * 重计算时,仅影响标记为 ‘#’ 或 ‘*’ 的行,以及本身带有公式的字段。第一列为空的行不会应用列公式。

标记字符含义如下:

!

该行字段用于定义列名,可使用 ‘$Tot’ 代替 ‘$6’ 引用该列。

^

该行为 上方 的字段定义名称。定义后,表格中任意公式可使用 ‘$m1’ 引用值 ‘10’ 。此外,为命名字段指定公式时,会保存为 ‘$name = ...’ 。

_

与 ‘^’ 类似,但为 下方 行的字段定义名称。

$

该行字段可定义公式 参数 。例如 ‘$’ 行某字段为 ‘max=50’ ,表格中公式可使用 ‘$max’ 引用 50。参数与常量用法完全一致,仅支持按表格单独定义。

#

在该行按下 TABRETS-TAB 时,字段会自动重计算。同时,使用 C-u C-c * 全局重计算时会包含该行。未标记行不会被该命令处理。

*

使用 C-u C-c * 全局重计算时包含该行,但不参与自动重计算。适合自动重计算影响编辑效率的场景。

/

不导出该行。适用于包含收缩标记 ‘<N>’ 或列分组标记的行。

最后,为展示强大的 Calc 包功能,以下表格计算了若干函数在 x 处的 n 阶泰勒级数:

|---+-------------+---+-----+--------------------------------------|
|   | Func        | n | x   | Result                               |
|---+-------------+---+-----+--------------------------------------|
| # | exp(x)      | 1 | x   | 1 + x                                |
| # | exp(x)      | 2 | x   | 1 + x + x^2 / 2                      |
| # | exp(x)      | 3 | x   | 1 + x + x^2 / 2 + x^3 / 6            |
| # | x^2+sqrt(x) | 2 | x=0 | x*(0.5 / 0) + x^2 (2 - 0.25 / 0) / 2 |
| # | x^2+sqrt(x) | 2 | x=1 | 2 + 2.5 x - 2.5 + 0.875 (x - 1)^2    |
| * | tan(x)      | 3 | x   | 0.0175 x + 1.77e-6 x^3               |
|---+-------------+---+-----+--------------------------------------|
#+TBLFM: $5=taylor($2,$4,$3);n3

Footnotes

(23)

名称必须以字母开头,仅可使用字母、数字和下划线。