Numlex 文档
语法参考
反馈问题

标签、小计与统计

标签行、分隔线分区、小计、总计、标签聚合、统计、动态随机值和可配置的页脚统计。

标签与小计在便笺之上加入了一层纯文本结构。行尾的 #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) → 3
  • median(1, 2, 3) → 2
  • median(1, 2, 3, 4) → 2.5
  • stdev(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 导出和打印会把派生行保持标记为派生,因此导出页面绝不会重复计算它们,导出也会冻结当前 随机值。

相关

发现文档有问题? 在 GitHub 上反馈