这是Emacs中的Org时钟表示例:
#+BEGIN: clocktable :maxlevel 1 :scope file :tcolumns 1 :formula %
#+CAPTION: Clock summary at [2014-03-30 Sun 22:47]
| Headline | Time | % |
|--------------+--------+-------|
| *Total time* | *4:31* | 100.0 |
|--------------+--------+-------|
| Item A | 1:07 | 24.7 |
| Item B | 1:06 | 24.4 |
| Item C | 2:18 | 50.9 |
#+TBLFM: $3='(org-clock-time% @2$2 $2..$2);%.1f
#+END:
我想按%列对表进行排序。这可能吗?
这是一个更复杂的例子:
#+BEGIN: clocktable :maxlevel 2 :scope file :tcolumns 1 :formula %
#+CAPTION: Clock summary at [2014-03-30 Sun 22:48]
| Headline | Time | % |
|--------------------+--------+-------|
| *Total time* | *4:31* | 100.0 |
|--------------------+--------+-------|
| Item A | 1:07 | 24.7 |
| \__ Item A1 | 0:07 | 2.6 |
| \__ Item A2 | 1:00 | 22.1 |
| Item B | 1:06 | 24.4 |
| \__ Item B1 | 1:06 | 24.4 |
| Item C | 2:18 | 50.9 |
| \__ Item C1 | 2:18 | 50.9 |
#+TBLFM: $3='(org-clock-time% @2$2 $2..$2);%.1f
#+END:
在这种情况下,顶级项应按其%值排序,但在每个子树中,次级项还应按其%值排序。
Org-mode org-clock.el
的时间代码不支持任何分类设施。函数org-clocktable-write-default
通过非常严格的算法创建表,其中调整的变量有限,所有这些都在变量org-clocktable-defaults
中。因此,动态块clocktable
“按原样”生成组织表,http://orgmode.org/manual/The-clock-table.html包含详尽的设置列表。
您可以通过将光标放在3列并执行M-x org-table-sort-lines
[n] umeric来手动排序第一个表。
至于用“关于水平结构的知识”对第二表进行排序 - 如果没有功能org-clocktable-write-default
的深刻变化,似乎是不可能的。
内置格式化程序org-clocktable-write-default
逐行排序条目,不知道级别。我一直在寻找相同的功能,最后编写了我自己的formatter(不是格式化程序),它根据级别对条目进行排序。它有一个限制,但它只能按名称或时间排序,因为按时排序的结果基本上与百分比排序相同,这在您的情况下是可接受的。