标签、小计与统计
标签行、分隔线分区、小计、总计、标签聚合、统计、动态随机值和可配置的页脚统计。
标签与小计在便笺之上加入了一层纯文本结构。行尾的 #tag 标记一行,精确的 --- 分隔线开始
新分区,subtotal 汇总当前分区,grand total 汇总成功的各小计,标签聚合回答
total of #tag 之类的查询。四个函数——count、median、stdev 和 rand——已内置,
浮动 Total 可显示 Sum、Average、Count 或 Median。一切都很严格:近似内容保持为普通行,聚合
绝不会重复消费派生行。
标题、标签与分隔线
- 标题是恰好以
#(井号加一个空格)开头的行。#food不是标题,而是带标签的行。 - 标签是行尾原子:
#后无空格,接着以字母开头的标识符(字母、数字、_、-;最多 64 个字素)。一行可以以多个标签结尾;同一行的重复标签会合并(保留第一个写法)。查找时 对大小写和 NFC 规范化,同时保留原始写法,因此分解形式的#cafe\u0301是有效标签,并与#café找到同一个聚合。标签绝不改变行的答案,也不会在表达式中间被识别 (2 #food + 3是算术)。注释和标题不声明标签。 - 分隔线是整行恰好等于
---的行(允许外侧空格)。它没有答案,永不进入求和,并开始 新的标签分区。----及更长的横线序列是普通行。
2 + 3 #math #cash → 5, tagged math and cash
5 #a
total of #a → 5
分区、小计与总计
旧的 total 命令仍然有效,而 # 标题、精确的 --- 分隔线或最近的 total 现在充当它的
边界。此外还提供:
subtotal— 汇总自上一个小计、标题或分隔线以来的合格行。subtotal + 15%/subtotal - 15%— 百分比作用于原始小计(100→115)。<name> = subtotal[ ± 15%]— 命名形式,把值作为普通标量写入环境 (sum = subtotal + 15%→115)。grand total(以及<name> = grand total)— 只汇总上方成功计算的小计行;分隔线不会 清空列表。失败或溢出的小计永远不计入。
grand total 至少需要两个成功小计;少于两个时,该行是静默的通用错误
Invalid expression,不做任何猜测。
total last N —— 只对最后几行求和
total 会汇总其分区内所有合格行。限定形式 total last N 只汇总同一分区中
紧邻其前的 N 个逻辑行里的合格数值,然后像普通 total 一样重置该分区。
N是正整数。 去掉首尾空格或制表符后,该行必须读作total last N(不区分大小写,三部分之间可以有一个或多个空格或制表符)。total last 0、total last -3、total last 3.5、缺少数字、多余词语或过大的数字都是普通行, 而不是命令。N计算的是逻辑行,而不是结果。 空行、注释、普通文本、错误、金额与单位行、 单独的答案令牌,以及派生行(小计、总计、标签聚合)都恰好占一个槽位,且不贡献 任何数值。命令自身所在的行永远不会成为它的槽位。- 分区边界不变。 窗口永远不会越过最近的
total/total last N、#标题或 精确的---分隔线。subtotal和grand total不是旧 total 的边界,但它们 自身的行仍然占用槽位。 - 合格规则不变。 与普通
total相同:有限的无量纲标量、精确整数和命名标量的 使用行计入;声明、金额、带单位的量、布尔值、日期和错误不计入。 - 窗口大于分区时,就汇总现有的内容(空分区为
0),并且命令在给出答案后重置 分区,因此随后的total或total last N从空分区开始。 - 溢出与动态值只按窗口判定。 只有当所选行的求和溢出时才会出现静默错误
Invalid expression;窗口之上的溢出不会影响它。只有当被选中的合格贡献是动态的 时候,该行才是动态的(依赖rand)。 - 遮蔽规则一致: 名为
total的活动变量或常量会同时禁用两种形式,与以往相同。
10
20
30
total last 2 → 30 (the blank line took a slot and added nothing)
40
50
total last 3 → 90 (only 40 and 50 were in the window)
total → 0 (the section was already reset)
10
20
subtotal → 30
10
subtotal
20
subtotal
grand total → 30
标题或分隔线会重置小计累加器:
10
# Section
20
subtotal → 20
旧 total 行不是小计的边界;它作为派生行被排除在小计之外,而旧 total 自身的分区仍跨越小计
行。
哪些行合格
合格的是有限的无量纲标量(普通数字、分数、百分比、乘数)、精确整数,以及使用命名标量的
行。不合格的包括:声明(x = …)、只有单个 token 的行、货币、带单位的量值、布尔/日期/时间/
地理值、错误、分隔线以及所有派生行。真正表达式内部的 token 计入;只有 token 的行不计入。
x = 5
x + 5
$7
3 kg
true
50%
1/4
0xFF
2 + 3
subtotal → 270.75
添加结构行
- File → Add Subtotal(
⌘T)和 File → Add Grand Total(⌘⇧T)会把命令插入光标 所在行。只有当目标行为空白(仅空格)或严格的空赋值<name> =(允许末尾空格)时才会触发; 其他内容只会发出提示音且不做任何更改。⌘⇧T还要求上方至少有两个成功小计。 - 双击空的答案行(仅空格或严格的
<name> =)通过同一规划器插入subtotal。标题、注释、 分隔线、仅标签行、普通文字和错误保持惰性。 - 小计/总计行的右键菜单中的 Convert to Normal Line 会把命令替换为按当前区域设置可重新
输入的、显示值的全精度数字字面量;命名形式保留
<name> =前缀,行数和稳定标识符不变。
标签聚合
total of #tag、average of #tag、count of #tag 和 median of #tag(不区分大小写;
每次查询恰好一个标签)只看到当前分区中严格位于其上方的、带该标签的合格行——分隔线
关闭分区。带多个标签的行会分别计入每个标签一次。空集对 total/count 给出 0,对
average/median 给出静默错误。派生的聚合行绝不会再喂给后续聚合、小计或页脚。
统计函数与自然短语
count、median 和样本 stdev(n−1)属于 27 个内置函数,rand 提供含端点的随机
整数。每个函数都遵循共享调用规则:名称不区分大小写、参数为完整表达式、严格的参数数量和
定义域错误。
count(1, 2, 3)→ 3median(1, 2, 3)→ 2median(1, 2, 3, 4)→ 2.5stdev(2, 4, 4, 4, 5, 5, 7, 9)→ ≈ 2.13809(样本,n−1)rand(1, 6)→1…6中的均匀整数
自然短语覆盖同样内容:median of 1, 2, 3 → 2、count of 1, 2, 3, 4 → 4、
standard deviation of 2, 4, 4, 4, 5, 5, 7, 9 和 random number between X and Y。列表
使用当前参数分隔符(点小数格式为 ,,逗号小数格式为 ;),因此在逗号小数设置中
median of 1,5; 2,5; 3,5 → 2.5。结果遵循工作表的小数位。中位数和平均值防溢出,
因此有限的极端值不会产生无穷大。
动态随机值
当 rand 实际运行过(( 前的空格和大小写无关)或该行读取了
动态名称时,该行就是动态的。未走到的 if 分支、注释和无效文本不会变成动态。依赖会通过
命名值、subtotal、grand total 和标签聚合传播;行类型保持不变(小计仍是小计)。
动态值会一直保持稳定,直到你编辑工作表或按 ⌘R(Recalculate Dynamic Values);滚动、
悬停和格式更改不会重绘它。但它永远不能生成 token,也不进入 Previous Answer 链。
PDF 导出会冻结当前值。
页脚统计
右键点击浮动 Total,在一个原生带勾选标记的菜单中选择 Sum、Average、Count 或
Median。该选择是应用全局的持久化设置(绝不属于 .nlx),并且只改变页脚——绝不改变工作表
内容、光标、选区、IME、滚动位置或编辑器。Count 显示精确整数;其他统计使用全局数字表示。面板
使用与上方合计相同的规范合格行:派生聚合行(内联 total、小计、总计、标签聚合、分隔线)永不
参与,默认 Sum 与之前的 Total 相同。未知的值会回落到 Sum。
Token、导出与合计交互
- 有限的标签聚合行或小计行对 Answer Token 而言是普通数字;同一结果绝不会被后续聚合、小计或 页脚重复消费。
- 逐答案舍入和数字格式覆盖绝不改变页脚统计;它遵循全局记法和区域设置。
- PDF 导出和打印会把派生行保持标记为派生,因此导出页面绝不会重复计算它们,导出也会冻结当前 随机值。