跳到主要内容
Varlig 指南
Varlig 首页

编写计算行

本页介绍每个计算块都离不开的基础知识:一行是如何被读取的,如何在算式旁边写备注,如何为值命名并重复使用,以及如何让一行的结果取决于某个条件。如果你刚开始在 Varlig 中做计算,请从这里读起;当某个名称或注释的表现与你预期的不同时,也可以回来查阅。

每行一个表达式

计算写在笔记中的计算块里。输入 ```calc 围栏,或者按下 ⌘Y 插入一个计算块。计算块中的每一行都是一个计算,答案显示在这一行旁边。

calc
CNY 12.50 * 5 结果为 62.50 CNY
45 min + 1 hour 20 min 结果为 2 hours 5 min
1.5 litres in ml 结果为 1,500 mL

空行和注释行没有答案,所以你可以把计算块排得疏朗一些,边写边解释。

Varlig 首先会把整行当作数学式来读取,包括 CNY 450 with 13% VAT 这样的日常短语。如果这样读不通,它会把不认识的词放到一边,所以 5 个苹果 + 3 个橙子 的结果仍然是 8。这对随手记一笔很方便,但描述性的文字可能会与某个短语或单位名称冲突,所以如果想说明一行的用途,请使用下文介绍的注释或标签。详情请参阅Varlig 如何读取短语。

本该是值的位置出现了一个词时,会得到一条点名这个词的错误,而不是一个错误的答案;错误信息还会给出你定义过的最接近的名称:

calc
rent = £1,150
rnt + £200 结果为 Unsupported: unrecognized calculation at "rnt"; did you mean "rent"?

含有数字或下划线的名称(例如 rent2 或 rent_2)也是如此。它既不会被当作描述放到一边,也不会被读成其中的数字;放在括号、函数调用或换算中也一样会被指出。标签里可以使用数字,所以请在标签中说明这一行:

calc
rent = £1,150
rent2 + £200 结果为 Unsupported: unrecognized calculation at "rent2"; did you mean "rent"?
(rnt + £200) * 2 结果为 Unsupported: unrecognized calculation at "rnt"; did you mean "rent"?
2号房: rent + £200 结果为 £1,350.00

以项目符号开头的行

行首的项目符号表示这是一条购物清单,于是金额前面的描述会被放到一边,这一行仍然照常参与合计。可用的符号有 -、*、•、+、– 和 —,后面跟一个空格:

calc
- flowers 1,200 结果为 1,200
* coffee $4.50 结果为 $4.50
- 12 mugs 结果为 12
- 6 bananas @ 18p 结果为 £1.08
- 500g pasta 3 packs at £1.10 each 结果为 £3.30

单独一个金额前面的短横线仍然是负号,所以 - 1,200 是 -1,200,- 12 kg 是 -12 kg。清单里要写测量值时,请用 * 或 • 开头——它们在任何情况下都是项目符号。

金额旁边的文字

描述文字能让一行更易读,而且绝不会改变数字。用 +、& 或 per 连接起来的词属于描述,而不是运算;紧贴着金额写的负号属于这个金额;写在某个词后面的编号也不会碍事:

calc
basin + pedestal £145 结果为 £145.00
food cost per head £14.20 结果为 £14.20
milk, bread, eggs £12.40 结果为 £12.40
Netflix -£10.99 结果为 -£10.99
DIRECT DEBIT REF 4471 £62.40 结果为 £62.40
Invoice #123: £250 结果为 £250.00
double cream 600 mL 结果为 600 mL
chlorine 3 ppm 结果为 3 ppm
t-shirt £12 结果为 £12.00
on the day 60 at £28 结果为 £1,680.00

对账单、订单确认邮件或零件清单粘贴进来之后长什么样,基本都涵盖在内了:全大写的行、用逗号列出的东西、带连字符的名称,以及描述恰好以 Varlig 认识的词开头的行,比如 double、per 或 on the day。

给一行编号的标签,比如 第2年、房间 12 或 预算 2026,以及 Q4 2026、July 2026、week 40 2027 这样带年份的时段,只要后面紧跟它的金额,无论在行中哪个位置,都属于描述。金额是指带货币、单位或百分号的金额,或者在下一个运算符之前单独出现的普通数字。标签中的数字不会被加进去:

calc
第1年 CNY 50,000 + 第2年 CNY 60,000 结果为 110,000.00 CNY
第1年 5,000 + 第2年 6,000 结果为 11,000
预算 2025 CNY 50,000 + 预算 2026 CNY 60,000 结果为 110,000.00 CNY
房间 12 CNY 400 + 房间 14 CNY 500 结果为 900.00 CNY
Q3 2026 CNY 50,000 + Q4 2026 CNY 60,000 结果为 110,000.00 CNY
July 2026 CNY 50,000 + August 2026 CNY 60,000 结果为 110,000.00 CNY

单词后面只有一个数字时,这个数字就是金额,比如 房租 1200 + 300;数量也照样计数,比如 门票 2 CNY 40 each。hour、week、day 这样的单位衡量的是它前面的数字,所以写在数字前面时,它和其他单词一样只是给这一行命名:hour 2 是第二个小时,绝不是 1 小时 2 分钟。另外,当后面跟着货币、单位或百分号时,标签数字后面的空格之后就是金额,所以 阶段 2 150 hours 是 150 小时,而不是 2,150 小时:

calc
hour 1 CNY 40 + hour 2 CNY 50 结果为 90.00 CNY
hours 8 + hours 7 结果为 15
阶段 2 150 hours + 阶段 3 160 hours 结果为 310 hours

注释

注释是计算器会忽略的文字。有四种写法:

形式 示例 被忽略的内容
井号注释 房租 * 12 # 每年 或 # 预算 从 # 加一个空格起到行尾的所有内容
斜杠注释 房租 * 12 // 每年 从 // 到行尾的所有内容
引号备注 "澳白" CNY 28 * 5 一行中任意位置双引号内的所有内容
括号备注 $999 (for iPhone 16) 一行中任意位置圆括号内的文字
calc
# 每周采购
牛奶 = CNY 12.50
面包 = CNY 15 // 酸种面包
鸡蛋 = CNY 18.90 "散养"
牛奶 + 面包 + 鸡蛋 # 不含其他东西 结果为 46.40 CNY

井号和斜杠会把该行剩下的部分都注释掉,而引号和圆括号可以出现在一行的中间。这样你就能说明某笔金额是干什么的,同时让计算继续下去:

calc
$999 (for iPhone 16) 结果为 $999.00
laptop £899 (refurbished) + £49 case 结果为 £948.00
Boing "747" is $386.8M 结果为 $386.8M

遇到看起来像数字的内容时,用引号更保险——上面的 747 就是这样被挡在算式之外的。括号里只有一个数字时,它是运算而不是备注,因为紧挨着括号的数字表示相乘:

calc
$999 (3) 结果为 $2,997.00

所以数量请写在括号外面,或者把数的是什么写清楚,例如 $999 (3 handsets)。只要不是单独一个数字,括号里的内容都算备注,包括带连字符的词和百分比:

calc
£134 (25% discount already applied) 结果为 £134.00
£10 (mother-in-law) 结果为 £10.00

以 # 加一个空格开头的行从头到尾都是注释,很适合在计算块中用作小标题。

井号后面有没有空格,决定了它是不是注释。紧跟着一个词的 #(例如 #food)是标签:它给这一行打上标记,不参与计算,并让你把块里带同一标签的行全部加总,无论它们写在哪里。

calc
£12.50 lunch #food 结果为 £12.50
£8 coffee #food 结果为 £8.00
total of #food 结果为 £20.50

井号后面跟数字则两者都不是:它表示这一行说的是第几号东西,不参与运算,所以发票号、订单号和零件号照着写就行。

calc
Invoice #123: £250 结果为 £250.00
part #4 weighs 20 g 结果为 20 g

标签

标签是位于行首的几个词,后跟一个冒号和一个空格。它用来描述答案,但不参与计算:

calc
房租 = CNY 4,500
水电网 = CNY 380
房租和水电网: 房租 + 水电网 结果为 4,880.00 CNY
咖啡馆账单: CNY 36.50 + CNY 12 结果为 48.50 CNY

标签可以使用字母(包括带重音符号的字母)、数字、空格和下划线,例如 2号房: 或 Q3 房租:。

标签不会创建名称。写下 房租和水电网: 房租 + 水电网 之后,并不存在名为 房租和水电网 的值。如果想重复使用某个结果,请使用 =。另外,请避免在赋值语句前加标签:住房: 房租 = CNY 4,500 会显示金额,但 房租 不会被存储。

赋值

= 为一个值命名。这一行同时会显示这个值,方便你边写边核对。

calc
价格 = CNY 850 结果为 850.00 CNY
价格 + 20% 结果为 1,020.00 CNY

如需更新已经定义过的名称,请使用 +=、-=、*= 或 /=:

calc
度假基金 = CNY 4,000
度假基金 += CNY 1,500 结果为 5,500.00 CNY
度假基金 -= CNY 850 结果为 4,650.00 CNY
份数 = 4
份数 *= 3 结果为 12
面粉 = 750 g
面粉 /= 3 结果为 250 g

如果等号右侧的计算出错,这个名称就会保存该错误,所有用到它的行都会显示同样的错误,直到你重新为这个名称赋值:

calc
客人 = 0
人均 = CNY 1,200 / 客人 结果为 Error: divide by zero
人均 + CNY 50 结果为 Error: divide by zero

你要存的名称可以带描述文字,就和它单独成行时一样。等号右侧不能写的是裹在一个裸名称外面的零散词语,因为那样就说不清你到底想存什么:在定义了 rent = £1,150 的情况下,x = spent excl rent 会报告 spent excl rent,而不会悄悄把房租存进去。

calc
paid rent = £1,150
daily spend = paid rent / 16 结果为 £71.88

名称

名称可以由多个词组成,可以包含带重音符号的字母、非拉丁字母、数字、下划线和表情符号:

calc
澳白 = CNY 28
澳白 * 5 结果为 140.00 CNY
crème brûlée = CNY 45
crème brûlée * 2 结果为 90.00 CNY
🍎 单价 = CNY 3.50
🍎 单价 * 6 结果为 21.00 CNY
Q1 销售额 = CNY 42,400
Q2 销售额 = CNY 41,100
Q1 销售额 + Q2 销售额 结果为 83,500.00 CNY
卧室_宽度 = 3.2 m
卧室_宽度 * 2 结果为 6.4 m

名称可以包含 Varlig 在别处使用的词,比如 to、in 或 needed,也可以借用内置函数的名称,比如 floor。只要你把它当作值来使用,Varlig 读取的就是你定义的值:

calc
time to work = 25 min
time to work * 10 结果为 4 hours 10 min
paint needed = 12.44 L
paint needed to 1 dp 结果为 12.4 L
floor = 12 m²
floor * 2 结果为 24 m²
floor(3.7) 结果为 3

如果后面跟着括号,比如 floor(3.7),这个函数仍会照常发挥作用。

名称甚至可以以表示数字的英文单词结尾,这样价格读起来就和菜单上写的一样:

calc
table for four = CNY 680
table for four / 4 结果为 170.00 CNY

如果你的两个名称开头相同,以较长的那个为准,所以带编号的名称会被完整读取:

calc
batch = £8.01
batch 2 = £8.21
batch 2 - batch 结果为 £0.20

名称区分大小写:eggs 和 Eggs 是两个不同的值。

如果希望某个名称在每篇笔记中都能使用,比如你的时薪或某个税率,请把它添加到设置中的全局定义里,而不必在每篇笔记中重复定义。

与内置词语冲突的名称

你定义的名称优先于其他任何拼写相同的内容,比如单位、数字词或常量。不过,日常名称不会干扰你的数量。直接写在复数名称或单位前面的数字表示对该事物计数,写在 tip 或 tax 前面的百分比表示小费或税费,所以名为 hours、nights 或 tip 的值不会改变下面这些行:

calc
时薪 = CNY 150 / hour
hours = 7.5
时薪 * 7.5 hours 结果为 1,125.00 CNY
nights = 14
CNY 480/night * 14 nights 结果为 6,720.00 CNY
tip = $12.69
$84.60 + 18% tip 结果为 $99.83

把指针悬停在这个词上,就能看到 Varlig 采用了哪种读法。在 时薪 * 7.5 hours 上会显示“Counts hours here, not the variable hours = 7.5.”在一行中的其他位置,这个名称就是你的值,比如 split CNY 600 among people。

换算也是同样的道理:写在 in、to 或 as 后面时,单位优先于存着普通数字的名称,所以你命名的一个计数不会挡住到同名单位的换算。定义 miles = 12 之后,20 km in miles 仍然得到 12.4274238447 mi。而写在单位前面的名称是在缩放它,而不是指定换算目标,所以在 scale = 76.2 的情况下,15.2 m in scale miles 会报告 Unsupported: conversion to scale miles,而不会在两者中替你挑一个。

写成比率形式、斜杠两边不带空格的单位,无论你在别处怎么用过这几个字母,都会被读作那个单位,所以从数据手册里拷来的密度或速度仍然表示它本来的意思:

calc
g = 9.81 m/s²
2 g 结果为 19.62 m/s²
2.7 g/cm³ 结果为 2.7 g/cm³
50 kg * g 结果为 490.5 N

在少数情况下,你的定义确实会改变一行的含义:

  • 单个字母总是表示你的值,所以定义 m = 3 之后,2 m 等于 6,而不是两米。
  • 数字写在单数名称前面时表示相乘,所以定义 宽度 = 3 之后,2 宽度 等于 6。单字母名称写在单位或运算符前面时也是如此。提示会说明这一点,并建议写成 2 * 宽度,让含义一目了然。
  • 数字词和常量同样会被取代:定义 one = 7 之后,one times two 等于 14。

养成两个习惯,就能避免大多数意外:

  • 不要单独使用单位符号作为名称,比如 m、s、h 或 in;也不要重复使用常量和数字词,比如 pi、one 或 i。
  • 尽量使用描述性的名称,比如 工作时长、日薪 或 跑步距离。

文档顺序

每一行都能看到在它上方定义的名称。名称还会延续到同一篇笔记中后面的计算块里,所以你可以一次设置好输入值,然后在页面下方继续使用。

calc
价格 = CNY 200
数量 = 3
总价 = 价格 * 数量 结果为 600.00 CNY
价格 = CNY 250
价格 * 数量 结果为 750.00 CNY
总价 结果为 600.00 CNY

重新定义 价格 不会改变前面的 总价 行:总价 是按照当时的价格算出来的。如需改变前面某个计算的结果,请编辑定义其输入值的那一行。

上一行的答案

prev 表示上方最近一行的答案;除非你把某个值命名为 ans,否则 ans 的含义与它相同。它们适合快速接着算一笔:

calc
CNY 12,500 * 12 结果为 150,000.00 CNY
prev / 52 结果为 2,884.62 CNY
ans + CNY 200 结果为 3,084.62 CNY

要把一组行加起来,请在单独的一行中写上 sum 或 total。请参阅合计上方的行。

按行号引用

line1、line2 等等按计算在笔记中的位置引用它,所有计算块依次连续编号:

calc
价格 = CNY 100 结果为 100.00 CNY
line1 * 2 结果为 200.00 CNY

引用会始终附在它所指的那一行上。在它上方插入一行,或者用 格式 › 将行上移 和 将行下移 移动行,答案依然使用同一行:Varlig 会作为单独的一步撤销操作替你重新编号,让你看到的和你得到的保持一致。

如果删除引用所指的那一行,这一行会显示 Error: line2 refers to a deleted line,而不是悄悄改用另一个编号。撤销会把两者都找回来。

拷贝和粘贴会保留引用

拷贝或剪切计算行再粘贴,其中的 line2 和 ↑ 引用会继续读取它们原来读取的那些行:

  • 指向同时拷贝的某一行的引用,会跟着副本走,并按粘贴的位置重新编号。
  • 指向没有拷贝的某一行的引用,在同一篇笔记中粘贴时,依然读取原来那一行。
  • 粘贴到另一篇笔记时,引用会变成那一行定义的名称,比如 房租 = CNY 4,800 对应的 房租;等那篇笔记定义了这个名称,或者使用了它,就能正常计算。没有名称的行会变成 line2_of_Budget 这样的引用,在你把它替换掉之前,它会一直说明情况:
calc
5 + line2_of_Budget 结果为 Unsupported: line2_of_Budget is a line of another note

剪贴板里只有你所选的文字,所以其他 App 得到的也正是这些内容,而且粘贴只算一步撤销操作。从受密码保护的笔记中拷贝的行,会按原样粘贴。

把正文变成计算

粘贴了一张发票,或者写了几行本该算出结果的内容?选中这些行,然后选择 格式 › 转换为计算块,或者在有选中内容时按下 ⌘Y:Varlig 会把它们包进一个计算围栏里,算作一次可撤销的编辑,答案随即出现在它们旁边。

如果没有选中任何内容,⌘Y 会插入一个空的计算块。计算块之外的文字永远不会被计算,所以粘贴过来的邮件,其中的数字、日期和发票编号都会原封不动。

重置作用域

只包含 --- 的一行会开始一个新的作用域。在它上方定义的名称、自定义单位和自定义函数,在它下方都不再可见。想在一篇笔记中比较两种方案、又不想让它们的值互相串用时,这会很有用。

calc
# 方案 A:市中心的公寓
房租 = CNY 6,500
通勤 = CNY 200
房租 + 通勤 结果为 6,700.00 CNY
---
# 方案 B:离市区较远的公寓
房租 = CNY 4,800
通勤 = CNY 600
房租 + 通勤 结果为 5,400.00 CNY

在 --- 下方,必须重新定义 通勤。如果忘了定义,用到它的那一行就没有可以引用的值。

条件

if … then … else … 根据比较结果在两个值中选择一个。你可以单独使用它,也可以把结果赋给一个名称:

calc
购物车 = CNY 79
配送费 = if 购物车 >= CNY 99 then CNY 0 else CNY 8 结果为 8.00 CNY
购物车 + 配送费 结果为 87.00 CNY

如果有两种以上的结果,可以串联 else if:

calc
购物车 = CNY 79
if 购物车 < CNY 49 then CNY 12 else if 购物车 < CNY 99 then CNY 6 else CNY 0 结果为 6.00 CNY

只有被选中的分支才会计算,所以另一个分支中即使有会出错的内容也没关系:

calc
客人 = 0
if 客人 > 0 then CNY 1,200 / 客人 else CNY 0 结果为 0.00 CNY

后置 if 和 unless

你也可以把条件放在值的后面。value if condition 会在条件成立时显示这个值,value unless condition 则在条件不成立时显示它。其他情况下,这一行都不显示任何内容。

calc
购物车 = CNY 79
CNY 8 if 购物车 < CNY 99 结果为 8.00 CNY
CNY 8 unless 购物车 >= CNY 99 结果为 8.00 CNY

这里的值也可以是写在双引号里的文字,于是一次检查就变成了一行会告诉你现状的提示,其余时候则保持空白:

calc
转化率 = 0.667%
"on target" if 转化率 > 0.5% 结果为 on target

在条件中赋值

两个分支可以为同一个名称赋值:

calc
购物车 = CNY 79
if 购物车 >= CNY 99 then 运费 = CNY 0 else 运费 = CNY 8 结果为 8.00 CNY
运费 结果为 8.00 CNY

如果只有 then 分支,赋值会在条件成立时进行,否则这个名称保留原来的值:

calc
购物车 = CNY 79
积分 = 0
if 购物车 > CNY 50 then 积分 = 50 结果为 50
积分 结果为 50

>= 等比较运算符以及 && 和 || 运算符,请参阅运算符、比较与条件。

综合运用

下面是一张小小的自由职业发票,写法和你在笔记中记录时差不多:

calc
# 3 月发票
日薪 = CNY 1,500
工作天数 = 6
差旅费 = CNY 386.40 // 火车票
服务费 = 日薪 * 工作天数 结果为 9,000.00 CNY
小计 = 服务费 + 差旅费 结果为 9,386.40 CNY
一般纳税人 = true
增值税 = if 一般纳税人 then 小计 * 6% else CNY 0 结果为 563.18 CNY
应付总额: 小计 + 增值税 结果为 9,949.58 CNY

每个输入值都有名称,所以下个月你只需修改 工作天数 和 差旅费,发票的其余部分就会随之更新。注释和标签让计算块清晰易读,而条件语句则让这篇笔记无论是否需要收取增值税都能适用。