【问题标题】:How can I format a column of numbers in an emacs org mode table?如何格式化 emacs 组织模式表中的一列数字?
【发布时间】:2013-09-23 18:47:57
【问题描述】:

我有一个这种形式的表格,在 emacs org-mode 中。请问,有没有办法格式化第 3 列和第 4 列中的数字以垂直排列小数点?

注意,顺便说一句:我使用 bash sort 命令对生成的文件进行了排序,发现每行开头的额外 | 被计为第 1 列,因此,例如标题为 OUTPUT 的列在这种情况下是第 4 位。

| CALL  | CHAN   |   OUTPUT |    INPUT | QTHR   | LOCATION       | NGR        | REGION   | CTCSS | KEEPER | Internet |
| GB3AH | RB11   |  433.275 |  434.875 | JO02KP | East Dereham   | TF94300990 | EAST ENG |  94.8 | G8PON  |          |
| GB3AS | RV48   |    145.6 |      145 | IO84LS | Wigton,Cumbria | NY33724123 | N.ENG    |    77 | G4KFN  |          |
| GB3AG | RV58   |  145.725 |  145.125 | IO86ON | Forfar         | NO48904170 | SCOT     |  94.8 | GM1CMF | Echolink |
| GB3AY | RV52   |   145.65 |   145.05 | IO75OR | Dalry          | NS26605190 | SCOT     | 103.5 | GM3YKE |          |
| GB3BA | RB01   |  433.025 |  434.625 | IO87SC | Banchory       | NJ72150255 | SCOT     |    67 | GM1XEA |          |
| GB3BD | RB06   |   433.15 |   434.75 | IO92RA | Ampthill       | TL01303860 | SE ENG   |    77 | G8MGP  |          |
| GB3AA | 23cm   |     1297 |     1291 | IO81RO | Alveston,Avon  | ST62608820 | SW ENG   | 118.8 | G4CJZ  |          |
| GB3AI | RV55   | 145.6875 | 145.0875 | IO91QQ | Amersham       | SU97089767 | SW ENG   |    77 | G0RDI  | Echolink |
| GB3AL | RV59   | 145.7375 | 145.1375 | IO91QP | Amersham       | SU95709550 | SW ENG   |    77 | G0RDI  |          |
| GB3AM | R50-13 |    50.84 |    51.34 | IO91QP | Amersham       | SU95709550 | SW ENG   |    77 | G0RDI  |          |

【问题讨论】:

    标签: bash sorting emacs org-mode


    【解决方案1】:

    步骤如下:

    1. 这是一个可选的,使事情更加直观。 C-c } 打开行号和列号的覆盖。 相同的组合关闭。请注意,这些不是更改 在您的缓冲区中,它们只是工具提示。 您可能想在第一行执行 C-c - 以查看 列号。
    2. 将光标移动到OUTPUT 列并使用C-S-right 插入一个新列。
    3. 您的光标现在应该位于新列中。 输入$4=$3;%0.3f,即把第三列复制到第四列, 并将其格式化为精度为 3 的浮点数。 按回车键,只会填入一个单元格。 按 C-u C-c * 重新计算所有单元格。 这也可以用 C-c C-c 来完成,带有光标 在#+TBLFM: 线上。
    4. 如果需要,您可以使用 C-M-left 删除旧列, 并删除下面的表格公式。

    更新:

    感谢@phils 的意见,这是另一种方法:

    1. 将光标移动到第 3 列中的任意数字,例如433.275
    2. C-c =,光标移动到 minibuffer。
    3. 输入$0;%0.3f 并按回车键。 这里$0 指的是当前列,$3 如果是第 3 列也可以。
    4. 在文档中的任意位置按 C-u C-c *, 或将光标移动到#+TBLFM: 行并按C-c C-c
    5. 对第 4 列重复相同的过程。

    【讨论】:

    • 感谢 abo-abo。请原谅我的无知,但是我看不到这些命令是在哪里输入的,所以请您提供一些更详细的说明吗?
    • org 版本 7 和 8 之间的某些行为可能发生了变化?在 vanilla Emacs 24.3 中,使用 M-S-<right> 插入新列(当前列的左侧),然后在列中键入 C-c = 以开始在步骤 3 中输入公式。
    • 看起来您也可以使用$0;%0.3f(即指定$0作为源)作为公式来重新格式化当前列中的值(无需创建新列)。因此,您可以在需要此格式的所有列中设置相同的公式,然后使用C-u C-c * 重新计算表格显示,如图所示。
    • 使@phils 的评论更明确,您可以使用$3=(some formula);%0.3f 来格式化另一个公式的输出。
    • 为避免列和等派生值的精度损失,派生值应基于原始值,而不是重新格式化的值。要使原始值尽可能不可见,请将列宽设置为 2,方法是将 <2> 放置在列中的某个位置,然后重新对齐。见here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多