Obsidian 插件:Advanced Tables 改进了表格导航、格式和操作
为 Obsidian 中的标记表添加改进的导航、格式和操作。
插件名片
效果&特性
该插件将 markdown 繁杂的围栏式语法,通过自动补全的方式使得只需专注于内容输入 ,而无需操心语法。整个表格输入过程中,仅由第一个 |
是手动输入的。该插件配合 editing-toolbar 能起到可视化编辑表格的效果,不用使用快捷键。
- 自动格式化表格
- Excel 样式的表格导航 (使用
Tab
和Enter
在行和列之间导航) - 类 org-mode 式的公式计算
- 添加、删除、移动行和列
- 设置列的对齐方式 (左对齐、居中、右对齐)
- 对指定的列进行排序
- 将表格导出为 CSV 格式
中文字符对齐
该插件针对英文字符能很好的自动对齐,但对中文字符对齐效果不佳。目前的解决方案是选用一款等宽的中文字体解决。但因为一个表格语法对齐而改变字体,如果不是特别在意的话建议还是忽略
使用
通过“|”创建表,然后键入表格的第一个标题并按 Tab。继续输入标题并按 Tab 键,直到创建完所有标题。按回车键转到下一行。
详细步骤
按如下步骤创建表格:
- 输入
|
;- 输入列标题,然后按
Tab
键;- 重复第二步,直到所有标题输入完毕,然后按
回车
键;- 此时光标来到表格的第一行;
- 输入列的内容,然后按
Tab
键;- 重复第五步,直到所有列的内容输入完毕,如果需要增加新行,按
回车
键;
快捷键
基本上所有表格操作都有对应的快捷键,包括但不限于行列的移动,居中居左居右对齐,删除行列,文件格式化所有表格,插入行列
快捷键(Hotkey) | 效果 |
---|---|
Tab | 切换到下一个单元格 |
Shift + Tab | 切换到前一个单元格 |
Enter | 切换到下一行 |
Ctrl + Shift + D | 在侧边栏打开表格控制面板 |
表格控制面板
插件本身支持图形化的操作,可以通过面板对表格进行控制。打开控制面板的快捷键为:Ctrl
+ Shift
+ D
。 控制面板如下图所示。
制面板上提供了表格操作的快捷方式。从图形可以很容易推测出每个图标对应的操作。当鼠标位于图标上方时还有提示消息,告知用户该图标的功能。
控制面板提供的功能包括:
- 设置列的对齐方式
- 行的上移、下移
- 列的左移、右移
- 插入行
- 插入列
- 删除行
- 删除列
- 以光标所在列为基础对表格进行正向、逆向排序
- 将表格导出为 CSV 文件
注意事项
请注意要先用 | 符号来进入快速编辑表格的模式。后面的输入只需要用 Tab 键进行区分。
使用 ctrl+shift+d 可以调出来表格的工具
移动端 App
在移动设备上使用 Obsidian 时,也可以使用 Advanced Tables 插件。
但 Enter
和 Tab
键导航表格将无法使用。
遇到这种问题,你可以使用 Obsidian 的移动设备工具栏,并在其中添加 “Next Cell”(下一个单元格)和“Next Row”(下一行)命令,以便于在移动端表格中导航,当然你也依然可以在侧边栏中使用相应按钮进行操作。
公式计算
粗略翻译了一下原文档,如有误请参考原文档地址:md-advanced-tables/formulas.md
快速一览
| Item | Grams |
| ----------------- | ----- |
| Whole Wheat Flour | 110 |
| Bread Flour | 748 |
| Warm Water | 691 |
| Salt | 18 |
| Starter | 40 |
| **Total Grams** | |
<!-- TBLFM: @>$2=sum(@I..@-1) -->
表格后面紧接着一个 HTML 语法式的注释,即 <!--
和 -->
夹住的部分,然后是一个固定字段 TBLFM:
用于标识这是一个公式计算。
Warning注意这个 HTML 语法的注释每一个空格都不能省略
接下来是书写公式:
<!-- TBLFM: DESTINATION=SOURCE -->
- DESTINATION:需要计算的列
- SOURCE:计算规则
<!-- TBLFM: @>$2=sum(@I..@-1) -->
@>
:最后一行$2
:第二列@I
:表示表头与表体之间的分隔行..
:表示范围@-1
:最后一行的上面一行,即倒数第二行sum(@I..@-1)
:sum 是求和函数,括号内是个范围参数
合起来就是:最后一行第二列用分割行到倒数第二行求和所得
行与列的选择
@
代表行,$
代表列,@1
代表第一行,$1
代表第一列
除了使用数字指定特定的行和列(称为绝对行或绝对列),还可以使用符号动态地引用表格的部分。
@<
和$<
分别表示第一行和第一列。@>
和$>
分别表示最后一行和最后一列。@I
表示表头与表体之间的分隔行。
行和列也可以相对于当前正在填充的单元格进行引用。例如,@-1
表示“同一列,上方一行”,而 $+2
表示“同一行,向右两列”。
在编写单元格引用时,如果省略了行或列部分,它表示“在当前行”或“在当前列”。在我们的例子中,@I
和 @-1
都省略了列,因此这些引用是目标单元格相同列的引用。
行始终由 @
表示,列由 $
表示。行和列可以指定为绝对值或相对值。
@1
表示第一行,@5
表示从上面数第 5 行。$1
表示第一列,$5
表示从左数第 5 列。@<
和$<
分别表示第一行和第一列。@>
和$>
分别表示最后一行和最后一列。@I
表示标题下的第一行内容。@-1
表示填充单元格上方的行。$+2
表示填充单元格右边的第二列。
行或列可以单独指定,或者组合在一起。例如,@5
表示当前列中的第 5 行。同样,$5
表示当前行中的第 5 列。当它们一起使用时,它们表示单个单元格。
当它们一起使用时,行应始终在列之前。
范围选择
仅有行和列时,公式可以选择单个单元格或整行和列。使用范围,公式可以选择部分行/列以及多个行/列。
范围由行/列、两个句点和另一个行/列创建。例如 @1..@3
。然而请注意,两边的组成部分必须匹配。范围不能从行到列,或从单元格到行。
@2..$4
- 不合法,不能从行到列。@2$3..@5
- 合法,如果一个项存在于第一个项中而不存在于第二个项中,则将其添加到第二项中。@2$3..@5$5
- 合法,从一个单元格到另一个单元格。$4..$6
- 合法,从一列到另一列。
范围可用于选择行或列的部分。
@2$>..@5$>
- 最后一列,从第 2 行到第 5 行。阶度4x1
@3$<..@3$5
- 第三行,从第一列到第 5 列。阶度1x5
范围也可以用于选择多个行或列。
@<..@>
- 从第一行到最后一行的整行(整个表格)。@3$1..@4$3
- 从第 3 行到第 4 行,从第 1 列到第 3 列。阶度2x3
代数运算
公式可以用于在表格中添加、减去、乘以和除以值。所有代数操作都必须包含在括号中。
加法
当相加时,指定的值中至少一个必须是单个单元格。公式不得将一个范围加到另一个范围中。
(@2$3+@3$4)
- 合法,相加两个单元格。(@2+@3$4)
- 合法,将当前单元格中第 2 行的值加到@3$4 的单元格。(@2$3+$4)
- 合法,将@23 中的值加到当前行,第 3 中的值加到当前行,第 4 列的值中。(@2+@3)
- 合法,将第 2 行当前列中的值加到第 3 行当前列中的值。@2$3+$4
- 不合法,缺少括号。
加法示例
在这个表格中,右列从第 4 行到最后一行填充。对于每一行,它将前两行的值相加。你可能会认出这是 Fibonacci数列。
| Start | Fibonacci |
|-------+-----------|
| 1 | 1 |
| 1 | 1 |
| | 2 |
| | 3 |
| | 5 |
| | 8 |
| | 13 |
| | 21 |
<!-- TBLFM: @4$>..@>$>=(@-1+@-2) -->
减法
减法要求第二个操作数为单个单元格。第一个操作数可以是范围或单元格。
(@2$3-@3$4)
- 有效,减去两个单元格。(@2-@3$4)
- 有效,在每一行中减去一个单元格的值。(@3$4-@2)
- 有效,在@3$4 中减去当前列中第 2 行的值。@2-@3$4
- 无效,缺少括号。
减法示例
在此示例中,我们正在从@2$3(3)的值中减去第 3 行(4,5,6)中的值。请注意,每个结果(-1,-2,-3)减去了第三行相应单元格中的值。
| One | Two | Three |
|-----+-----+-------|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| -1 | -2 | -3 |
#+TBLFM: @>=(@2$3-@3)
乘法
乘法需要至少一个值为单个单元格。无法使用公式将一个范围与另一个范围相乘。
(@2$3*@3$4)
- 有效,将两个单元格相乘。(@2*@3$4)
- 有效,将单个单元格与第 2 行中的当前列相乘。(@2$3*$4)
- 有效,将单个单元格与第 4 列中的当前行相乘。(@2*@3)
- 有效,将第 2 行中的当前列与第 3 行中的当前列相乘。(@2..@3*@2$4..@4$4)
- 无效,两个操作数都是范围。@2$3*$4
- 无效,缺少括号。
除法
除法要求第二个操作数为单个单元格。第一个操作数可以是范围或单元格。
(@2$3/@3$4)
- 有效,将两个单元格相除。(@2/@3$4)
- 有效,在每行的每个值上除以单个单元格。(@3$4/@2)
- 有效,将单个单元格除以第 2 行中的当前列。(@3$4/@2..@3)
- 无效,无法将单个单元格除以范围。@2/@3$4
- 无效,缺少括号。
条件操作
条件允许根据两个输入的比较选择一个值。例如:
if(@3$4<@4$5, @2, @3)
在此示例中,我们将比较位于单元格 @3$4
中的值与单元格 @4$5
。如果第一个小于第二个,则结果将为第一个参数(@2
),否则结果将为第二个参数(@3
)。
仅能在单元格之间进行比较,无法比较范围。
比较运算符
<
:小于>
:大于<=
:小于或等于>=
:大于或等于==
:相等!=
: 不等于
条件示例
此条件操作将最后一列的值设置为大于三的第一列的值。如果是,则将该值放在最后一列,否则将三的值放在最后一列。
换句话说,此函数将最后一列设置为第一列和三的较大者。
| One | Two | Three |
|-----+-----+-------|
| 1 | 2 | 3 |
| 4 | 5 | 4 |
| -1 | -2 | 3 |
#+TBLFM: $>=if($1>3, $1, 3)
函数
函数看起来与条件操作非常相似。一个有值的关键词后面跟随括号。例如,mean (@3$<..@ 3$4)
。函数调用传递提供的范围、单元格、行或列中的数据,然后执行计算并返回结果。
有两个可以使用的函数:
sum
sum
与上面的加法代数运算非常相似,但它将添加提供的范围、行或列中的所有单元格,并输出单个单元格结果。
| One | Two | Three |
|-----------+-----+-------|
| 1 | 2 | |
| 4 | 5 | |
| **Total** | | 12 |
<!-- TBLFM: @>$>=sum(@2$<..@3$2) -->
mean
mean
计算提供的范围、行或列的平均值。与 sum
一样,它将输出单个单元格结果。
嵌套
函数的不同构建块可以嵌套在一起,只要它们的 arity 匹配。例如,sum
的输出可以用作条件操作的输入。以下是一些有效嵌套的示例:
<!-- TBLFM: @>=sum(@3..@4)+@3$1 -->
- 将第三行到第四行相加,再加上第三行第四列的值填到最后一行<!-- TBLFM: @3$3=if(@2$4+@2$5==@2$6, @3$3, @4$3) -->
- 在比较中添加两个单元格
链接和多个公式
表格可能有多个定义的公式。有两种方法可以实现这一点。在单个公式行中,多个公式可以使用“::”链接在一起。例如:
<!-- TBLFM: @2=@4::$1=$2 -->
链接时,将从左到右计算公式。将应用第一公式后产生的结果作为第二公式的输入。这意味着第二个公式可以在第一个公式计算的值上操作。
第二种方法是使用多个公式行。
<!-- TBLFM: @2=@4--> <!--TBLFM:$1=$2 -->
此方法与链接相同。公式行将从上到下计算。就像链接时一样,将一个公式产生的输出表作为下一个公式的输入。
可以混合使用这些方法。
<!-- TBLFM: @2=@4::$1=$2 --> <!-- TBLFM: @5$3=sum(@2) -->
格式化选项
您可以通过使用格式化指令来请求结果以某个小数点输出。例如:
| A | B | C | D |
| --- | --- | --- | --- |
| 1 | 2 | 5 | 6 |
| 3 | 4 | 7 | 8 |
| | | | |
<!-- TBLFM: @>=(@I / @3$4);%.2f -->
在此示例中,格式化指令是末尾的“;%.2f”。如果没有它,结果将是值,“0.14285714285714285”,但是因为我们请求了两个小数点,结果将是“0.14”。
关联推荐
- obsidian-sortable:提供搜索 Obsidian 设置和插件设置选项的能力
- obsidian-excel-to-markdown-table:可以将来自 Microsoft Excel、Google Sheets、Apple Numbers 和 LibreOffice Calc 的数据粘贴为 Obsidian 编辑器中的 Markdown 表格。
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。