<org manual>翻译--3.5.1 引用

来源:互联网 发布:道长脸型数据 编辑:程序博客网 时间:2024/05/01 02:42

3.5.1 引用 :如何引用其他域或区域

要根据其他域的值来计算表格中的值,公式必须引用到其他域或区间. 域可用通过名称,通过绝对坐标和相对坐标用这三种方式来引用. 要确定某个域的坐标是什么,在这个域中按下'C-c ?'就会在echo区域显示出该域的坐标,也可以按下'C-c }'来切换显示坐标网格.

  • 域引用 在公式中有两种方法来引用其他域中的值. 第一种类似于其他电子表格,你可以用一个字母/数字组合起来表示一个域的引用,例如'B3'的意思是第3行的第2个域. 然而,Org更推荐28使用另一种更加通用的表示方法,这种表示方法看起来是这样的:

    @row$column      

    列的可以用绝对坐标表示,类似于这样:$1,$2…$N.也可以用相对坐标表示(当前列为基准值)类似于这样:$+1,$-2,$<,$>.其中$<固定表示第一列,$>固定表示最后一列. 另外,你可以用$>>>表示从右往左数第3列

    行在计算坐标时,值计算数据行,而 不算水平分隔行(hline) .类似于列的表示方法,你可以使用绝对行数来表示,类似于@1,@2…@N,也可以用相对行数来表示,类似于@+3,@-1,<和@>. 其中<固定表示表格中的第一行,@>固定表示表格中的最后一行29.另外你也可用通过与hline的相对位置来引用行:@I引用第一个hline,@II引用第二个hline,一次类推. @-I引用的是当前行的上一个hline,@+I是当前行的下一个hline. 你也可以通过@III+2表示第3个hline的后2行

    $0和$0分别引用的是当前行和当前列,也就是要被计算的域的行和列. 另外,如果你忽略了引用的行或列部分,默认情况下使用当前域的行或列代替.

    Org中不带符号只含数字的引用是固定引用,也就是说如果你在两个不同的域中使用同一个引用表示法,引用的是同一个域. 而org中带符号和数字的引用是浮动引用,即相同的引用表示法可能引用的是不同的域,这取决于公式所在的那个域的位置.

    下面是一些例子:

          @2$3      2nd row, 3rd column (same as C2)$5        column 5 in the current row (same as E&)@2        current column, row 2@-1$-3    the field one row up, three columns to the left@-I$2     field just under hline above current row, column 2@>$5      field in the last row, in column 5


  • 区间引用

    你可以引用一个矩形区间,方法是指明两个域引用,并用'..'连接起来. 如果这两个域都处于同一个行,可用只使用'$2..$7'这样来代替, 但若至少有一个域处于不同的行,那么你需要对至少第一个域使用完整的@row$column格式(即引用必须以@开头,以便能够正确第解释).例如

          $1..$3        first three fields in the current row$P..$Q        range, using column names (see under Advanced)$<<<..$>>     start in third column, continue to the one but last@2$1..@4$3    6 fields between these two fields (same as A2..C4)@-1$-2..@-1   3 numbers from the column to the left, 2 up to current row@I..II        between first and second hline, short for @I..@II

    区间引用返回一个值的vector(向量),并传入Calc向量函数中执行. 区间中的空域正常来说都会被忽略掉,这样向量中就只包含了非空域(要切换这种行为,参见下面的'E' mode).如果区域中所有的域都为空域,那么就会返回'[ 0 ]'一次来避免公式中发生语法错误.


  • 公式中的域坐标

    若要在Calc公式使用当前域的行号和列号,可用用@#和$#来表示. 在传统的Lisp公式中等价于'org-table-current-dline'和'org-table-current-column'.例如:

          if(@# % 2, $#, string(""))   column number on odd lines only$3 = remote(FOO, @@#$2)      copy column 2 from table FOO into                             column 3 of the current table

    对于第二个例子,FOO表格至少需要有与当前表格一样多的行. 注意:这对于大量的行操作来说是很不效率的30.


  • 命名引用 '$name'会被被解释成列名,参数或者常量. 可以通过变量'org-table-formula-constants'来定义全局常量,或者通过类似下面一行的方法来为某个文件定义本地常量.

    #+CONSTANTS: c=299792458. pi=3.14 eps=2.4e-6

    另外,在表格公式中,也可以使用属性(参见章节属性与列)来作为常量使用31:你可以通过名为'$PROP_ Xyz'的常量来访问属性':Xyz:',Org会在表格所在大纲条目及其上级条目中搜索该属性. 如果你加载了'constants.el'这个包,那么Org也会使用这个包来匹配常量,这个包甚至包括自然常量(例如$h表示普朗克常量)和单位(例如$km表示千米). 列名和参数可以在一个特殊的表格行内指定,更具体描述以后再说,可以参见高级特性.现阶段所有的名字都必须以字母开头,以后可能可以以字母和数字开头.


  • 远程引用 你也可以引用其他表格中的常量,域和区间, 这些表格可以在同一个文件也可以在不同文件中. 引用的方法为

    remote(NAME-OR-ID,REF)

    这里NAME可以是当前文件中当前表格以前所定义的表格名字. 这里表格名字可以用'#+TBLANAME:表格名字'来定义. NAME的值也可以是某个大纲条目的ID(甚至可以是其他文件中的大纲条目),这时引用的就是该条目中的第一个表格. REF是一个绝对域或绝对区间的引用(具体方法如上面所示,例如@3$3或者$somename,这些绝对引用需要确保在被引用表格中都是可用的).



0 0
原创粉丝点击