org-mode中的表格

1 输入表格的方法

在org-mode中,有一个函数可以比较快捷的把一个区域内的文字变成表格,不需要事先指定表格的行数和列数,这个函数名叫

org-table-create-or-convert-from-region

这个函数绑定在 C-c | 上。在调用这个函数之前,需要先选定一个区域,然后在进行转换。例如有下面一块区域

cell11 cell12 cell13 cell14
cell21 cell22
cell31 cell32 cell33
cell41
cell51

其中个单元格之间用空格隔开,每行为一行,选定上述区域以后,键入 C-c | , 则可以 生成表格,生成的表格如下所示:

cell11 cell12 cell13 cell14
cell21 cell22    
cell31 cell32 cell33  
cell41      
cell51      

2 指定表格分割符

这个函数可以接受以 C-u 开头的可选参数。具体的参数意义如下:(参考函数 org-table-convert-region

(4) 使用逗号作为分割符
(16) 使用tab作为分割符
integer When a number, use that many spaces as field separator
nil When nil, the command tries to be smart and figure out the
  separator in the following way:
  - when each line contains a TAB, assume TAB-separated material
  - when each line contains a comma, assume CSV material
  - else, assume one or more SPACE characters as separator."

3 指定表格的标题和风格

如果要为表格增加标题和风格,可以在表格的前面加上属性,如下所示

#+CAPTION: 示例表格
#+ATTR_HTML: :border 2 :rules all :frame border :width 50%
| cell11 | cell12 | cell13 | cell14 |
| cell21 | cell22 |        |        |
| cell31 | cell32 | cell33 |        |
| cell41 |        |        |        |
| cell51 |        |        |        |

生成的效果如下:

表1  示例表格
cell11 cell12 cell13 cell14
cell21 cell22    
cell31 cell32 cell33  
cell41      
cell51      

4 html表格的所有属性

属性 描述
align
  • left
  • center
  • right

不赞成使用。请使用样式代替。

规定表格相对周围元素的对齐方式。

bgcolor
  • rgb(x,x,x)
  • #xxxxxx
  • colorname

不赞成使用。请使用样式代替。

规定表格的背景颜色。

border pixels 规定表格边框的宽度。
cellpadding
  • pixels
  • %
规定单元边沿与其内容之间的空白。
cellspacing
  • pixels
  • %
规定单元格之间的空白。
frame
  • void
  • above
  • below
  • hsides
  • lhs
  • rhs
  • vsides
  • box
  • border
规定外侧边框的哪个部分是可见的。
rules
  • none
  • groups
  • rows
  • cols
  • all
规定内侧边框的哪个部分是可见的。
summary text 规定表格的摘要。
width
  • %
  • pixels
规定表格的宽度。

5 指定html表格的缺省属性

这个属性放在变量 org-html-table-default-attributes 中。 可以直接修改这个变量的 内容,缺省的情况下,它的内容为

(:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides")

下面的代码会设置为这个变量的缺省值

(setq org-html-table-default-attributes
      (list  :border "2" :rules "all" :frame "border" :align "center"
	     :cellspacing "0"
	     :cellpadding "6"))

下面使一个没有指定 ATTR_HTTR 的表格,它将使用上面的缺省值来生成html表格。

cell11 cell12 cell13 cell14
cell21 cell22    
cell31 cell32 cell33  
cell41      
cell51      

6 表格标题的位置

如果为表格指定了标题,标题的位置使通过 org-html-table-caption-above 来控制的。 如果它的值为 t , 那么标题将放在表格的上方,否则标题将放在表格的下方。

我们习惯于把标题放在下面,因此把这个值设为 nil , 如下所示

(setq org-html-table-caption-above nil)

7 表格中的公式

org-mode中的表格也可以象excel中那样进行计算,其中某行某列的指定方法为 @row$col ,要 指定一个范围可以使用 .. ,比如 @2$2..@2$10 指第二行的第二列到第10列。公式写在表格 的下面,如下所示:

| a | a^2 |
| 2 |   4 |
| 3 |   9 |
| 4 |  16 |
#+TBLFM:  $2=$1*$1

| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 6 | 9 |
#+TBLFM:  @4$1=vsum(@1$1..@3$1)
#+TBLFM:  @4$2=vsum(@1$2..@3$2)

要得到当前单元格的行号和列号,可以使用@#和$#。如以下表格中,每个单元格的值为其行号乘以列号

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
6 12 18 24 30

其公式如下:

#+TBLFM: @1$1..@6$5=@#*$#

要刷新表格的时候,在公式上按 C-c C-c

所有可用的函数,可以参考emacs源码中的 lisp/calc/calc-lang.el 文件。

emacs的源码在这里 : https://github.com/emacs-mirror/emacs/

8 利用R语言直接输入表格

R语言中的dataframe就是表格的形式,通常情况下,如果直接利用R语言输出dataframe,org mode是不会给出表格的表头的。为了得到表头, :colnames yes 。如下所示:

#+BEGIN_SRC R :exports both :results table :colnames yes :rownames yes
df=data.frame(col1=rep(5,3),col2=rep(6,3))
#+END_SRC
  col1 col2
1 5 6
2 5 6
3 5 6


本文地址: http://www.bagualu.net/wordpress/archives/6544 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注