org: Advanced features
3.5.10 Advanced features
------------------------
If you want the recalculation of fields to happen automatically, or if
you want to be able to assign names(1) to fields and columns, you need
to reserve the first column of the table for special marking characters.
‘C-# (org-table-rotate-recalc-marks)’
Rotate the calculation mark in first column through the states ‘ ’,
‘#’, ‘*’, ‘!’, ‘$’. When there is an active region, change all
marks in the region.
Here is an example of a table that collects exam results of students
and makes use of these features:
|---+---------+--------+--------+--------+-------+------|
| | 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: please note that for these special tables, recalculating the
table with ‘C-u C-c *’ will only affect rows that are marked ‘#’ or ‘*’,
and fields that have a formula assigned to the field itself. The column
formulas are not applied in rows with empty first field.
The marking characters have the following meaning:
‘!’
The fields in this line define names for the columns, so that you
may refer to a column as ‘$Tot’ instead of ‘$6’.
‘^’
This row defines names for the fields _above_ the row. With such a
definition, any formula in the table may use ‘$m1’ to refer to the
value ‘10’. Also, if you assign a formula to a names field, it
will be stored as ‘$name=...’.
‘_’
Similar to ‘^’, but defines names for the fields in the row
_below_.
‘$’
Fields in this row can define _parameters_ for formulas. For
example, if a field in a ‘$’ row contains ‘max=50’, then formulas
in this table can refer to the value 50 using ‘$max’. Parameters
work exactly like constants, only that they can be defined on a
per-table basis.
‘#’
Fields in this row are automatically recalculated when pressing
<TAB> or <RET> or ‘S-<TAB>’ in this row. Also, this row is
selected for a global recalculation with ‘C-u C-c *’. Unmarked
lines will be left alone by this command.
‘*’
Selects this line for global recalculation with ‘C-u C-c *’, but
not for automatic recalculation. Use this when automatic
recalculation slows down editing too much.
‘ ’
Unmarked lines are exempt from recalculation with ‘C-u C-c *’. All
lines that should be recalculated should be marked with ‘#’ or ‘*’.
‘/’
Do not export this line. Useful for lines that contain the
narrowing ‘<N>’ markers or column group markers.
Finally, just to whet your appetite for what can be done with the
fantastic ‘calc.el’ package, here is a table that computes the Taylor
series of degree ‘n’ at location ‘x’ for a couple of functions.
|---+-------------+---+-----+--------------------------------------|
| | 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 ----------
(1) Such names must start by an alphabetic character and use only
alphanumeric/underscore characters.