dsh-math-calculator 2.3.2 → 2.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +192 -0
- package/dsh.plugin.json +1 -1
- package/lib/help.js +547 -184
- package/lib/index.js +190 -35
- package/lib/ode.js +34 -0
- package/lib/ops/ode-op.js +42 -1
- package/lib/ops/recurrence-op.js +222 -0
- package/lib/ops/shared.js +19 -0
- package/lib/types/help.d.ts +15 -1
- package/lib/types/ode.d.ts +17 -0
- package/lib/types/ops/recurrence-op.d.ts +44 -0
- package/lib/types/ops/shared.d.ts +22 -1
- package/lib/units-data.js +29 -6
- package/package.json +1 -1
- package/src/help.ts +561 -186
- package/src/index.ts +190 -35
- package/src/ode.ts +46 -0
- package/src/ops/ode-op.ts +43 -1
- package/src/ops/recurrence-op.ts +215 -0
- package/src/ops/shared.ts +33 -0
- package/src/units-data.ts +29 -6
package/lib/help.js
CHANGED
|
@@ -205,30 +205,67 @@ const STATS_BODY = () => `【统计与概率】
|
|
|
205
205
|
「这个数字落在正常区间的概率」→ normal + CDF
|
|
206
206
|
A/B 结果差异是不是巧合 → t 分布`;
|
|
207
207
|
/** 【微分方程】ODE 数值解。 */
|
|
208
|
-
const ODE_BODY = () =>
|
|
208
|
+
const ODE_BODY = () => `【动力学】连续用 ode,离散用 recurrence
|
|
209
209
|
|
|
210
|
+
★★ 先判断:你的模型是「连续变化」还是「按期结算」?
|
|
211
|
+
连续(每个人随时都在增长)→ ode
|
|
212
|
+
离散(年度结算、批次解锁、世代更替)→ recurrence
|
|
213
|
+
两者答案不同,写年表必须用离散值(见下面第 3 段)。
|
|
214
|
+
|
|
215
|
+
══ 1. ode:连续时间积分(RK4)══
|
|
210
216
|
一阶方程组(SIR / 捕食模型)与二阶方程(自动降阶)都能解。
|
|
211
217
|
|
|
212
218
|
参数:
|
|
213
|
-
expression
|
|
214
|
-
例:"S'=-k1*S*I; I'=k1*S*I-k2*I; R'=k2*I" ← SIR
|
|
215
|
-
"x'=y; y'=-k*x" ←
|
|
216
|
-
initial
|
|
219
|
+
expression 状态方程,分号分隔。等号左边是导数变量
|
|
220
|
+
例:"S'=-k1*S*I; I'=k1*S*I-k2*I; R'=k2*I" ← SIR
|
|
221
|
+
"x'=y; y'=-k*x" ← 简谐
|
|
222
|
+
initial 初值 {S:999, I:1, R:0}
|
|
217
223
|
from/to 积分区间(默认 0 → 10)
|
|
218
|
-
steps RK4 步数(默认 1000
|
|
219
|
-
samples
|
|
224
|
+
steps RK4 步数(默认 1000,刚性方程加大)
|
|
225
|
+
samples 返回采样点数(默认 24)
|
|
226
|
+
at ★ 要精确输出的时点,如 [5,10,20]
|
|
227
|
+
|
|
228
|
+
返回:轨迹、终点值、极值、指定时点的值、**发散警告**
|
|
229
|
+
|
|
230
|
+
★ at 是什么用的:默认采样是均匀的(t = 1, 2.9, 4.8, …),
|
|
231
|
+
写年表时「第 5 年、第 10 年」一个都对不上。传 at:[5,10,20] 就精确给那几个。
|
|
220
232
|
|
|
221
|
-
|
|
233
|
+
★ 二阶方程降阶:y'' 写成 y'=y_d; y_d'=…(y_d = dy/dt)。
|
|
234
|
+
缺辅助变量会提示补哪个,不会静默给错。
|
|
222
235
|
|
|
223
|
-
★
|
|
224
|
-
|
|
236
|
+
★ 数值解不是解析解:steps 太少会失真,刚性方程易发散 ——
|
|
237
|
+
看到发散警告就加大 steps,或换解析思路。
|
|
238
|
+
|
|
239
|
+
══ 2. recurrence:离散递推(出逐年表)══
|
|
240
|
+
{operation:"recurrence", recurrence:"P*2", initial:{P:1}, periods:20}
|
|
241
|
+
→ 逐期表 + 终值 + 与连续模型的差额
|
|
242
|
+
|
|
243
|
+
参数:
|
|
244
|
+
recurrence 下一期 = f(本期)。单状态最常见:
|
|
245
|
+
"P*2" ← 每期翻倍
|
|
246
|
+
"P*min(1.2, 1000/P)" ← 带资源上限的年度增长
|
|
247
|
+
initial 初值,可多个状态(逗号/分号分隔的表达式各自求一次)
|
|
248
|
+
periods 迭代期数(默认 12,上限 5000)
|
|
225
249
|
|
|
226
|
-
★
|
|
227
|
-
|
|
250
|
+
★ 支持 min()/max() 约束 —— 「增速 20% 但不超过 1000」这种写法直接可用,
|
|
251
|
+
结果会在第 38 期左右平滑收敛到 1000,不会越过。
|
|
228
252
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
253
|
+
══ 3. 为什么非要区分(实测数字)══
|
|
254
|
+
同一件事「从 1 起每年 ×2」:
|
|
255
|
+
离散(recurrence) 2^19 = 524,288
|
|
256
|
+
连续(ode, 0.693P) e^(0.693×19) = 522,824
|
|
257
|
+
差 0.28%
|
|
258
|
+
|
|
259
|
+
0.28% 看着可忽略,但第 33 年换成本「亿人」时差 0.5 亿 ——
|
|
260
|
+
**而写作时写的是「第 33 年,四十二亿人」这种具体整数。**
|
|
261
|
+
连续模型的 4.24e9 会让你在「42 亿还是 43 亿」上反复纠结。
|
|
262
|
+
|
|
263
|
+
★ 所以 recurrence 会在结果末尾直接给出「连续近似 vs 离散」的差额,
|
|
264
|
+
让你一眼看出「用 ode 顶替会差多少」。
|
|
265
|
+
|
|
266
|
+
★ 写故事时的常见用法:
|
|
267
|
+
传染病扩散(SIR)、捕食者-猎物振荡(Lotka-Volterra)、
|
|
268
|
+
碳循环、人口动态、冷却曲线、**逐年人口/资源年表**`;
|
|
232
269
|
/** 【公式库】442 条公式的调用与检索。 */
|
|
233
270
|
const FORMULA_BODY = () => `【公式库】共 ${FORMULAS.length} 条自然科学公式
|
|
234
271
|
formula 调一条公式:formula="escape_velocity", overrides={M,r}
|
|
@@ -423,139 +460,13 @@ const WORKSPACE_BODY = () => `【数据管理】workspace 工作区管理
|
|
|
423
460
|
|
|
424
461
|
【显示精度固化】{action2:"set", displayPrecision:4} 固化;传 0 = 清除
|
|
425
462
|
【注意】本插件无图形界面,全部经工具与 HTTP 路由操作`;
|
|
426
|
-
/**
|
|
427
|
-
const
|
|
428
|
-
{label:"日产台数", expr:"1e8*25000", sanity:{max:1e10, note:"帝国总兵力"}}
|
|
429
|
-
→ ⚠ 超出锚点上限 1e10(帝国总兵力)达 250 倍
|
|
430
|
-
键:max 上限 / min 下限 / expect 期望量级(expect:3 即 10³)/ note 依据
|
|
431
|
-
★ 判据来自你,工具只比对不猜;量纲不可比时不报;不声明则零提示
|
|
432
|
-
★ 目前只在批量 expressions 里生效
|
|
433
|
-
|
|
434
|
-
【账本闭合】无独立 check 操作,一条 expressions 逐项列值即可:
|
|
435
|
-
[{label:"A", expr:"650*3840"}, {label:"四项和", expr:"…"}]
|
|
436
|
-
再补一条 {label:"与目标之差", expr:"...-4075000"} ← 差值 0 即闭合
|
|
437
|
-
不做 PASS/FAIL:差 3 与差 3% 是两回事,压成布尔就糊了
|
|
438
|
-
|
|
439
|
-
【多步链】批量内前一条的赋值对后一条可见:
|
|
440
|
-
[{label:"单价", expr:"u=5"}, {label:"小计", expr:"u*3"}]
|
|
441
|
-
★ 中间某步失败时,依赖它的下游会明确报错,不会变成「虚成功」
|
|
442
|
-
|
|
443
|
-
【文明崩溃推演】财政链,每步可核对(用 formula 逐条调,数值自己代入)
|
|
444
|
-
① effective_tax_rate 名义税率 30% 但实际只 10% → 征管弱,20% 是漏征+逃亡
|
|
445
|
-
② fiscal_balance 收入 10% GDP、支出 15% → 赤字 5%
|
|
446
|
-
③ primary_balance PB = −5% + 利息 3% = −2% GDP
|
|
447
|
-
→ 不是被旧债拖垮,而是**经营本身在亏**(结构性危机,比单纯赤字严重)
|
|
448
|
-
④ fiscal_sustainability i=8%、g=2%、d=80% → 需 PB ≥ 6%×0.8 = 4.8%,实际 −2%
|
|
449
|
-
→ 缺口 6.8%/年,十年翻倍
|
|
450
|
-
⑤ seigniorage 税加不动、借债又 i>g → 只能铸币 → 通胀上升
|
|
451
|
-
→ 通胀推高 i → 回到 ④,死亡螺旋
|
|
452
|
-
⑥ fiscal_autonomy 刚性 85% → 没有可裁量的钱,改革也推不动
|
|
453
|
-
★ 这套链能推出「为什么这个政权看着还能撑、其实已在螺旋里」,
|
|
454
|
-
比「因为腐败所以要亡」可信得多——腐败只是其中一环。
|
|
455
|
-
|
|
456
|
-
【巨兽可行性推演】生物链,回答「这么大的生物能不能活」
|
|
457
|
-
① sa_volume_ratio 体重 ×8 → 表面积 ×4 → 单位体重散热与摄氧都 ÷2
|
|
458
|
-
② fick_diffusion A∝M^(2/3)、δ∝M^(1/3) → 供氧能力 ∝ M^(1/3)
|
|
459
|
-
③ diffusion_time 若无循环,1 m 组织扩散需 158 年 → 必须有循环系统
|
|
460
|
-
④ peclet_number 血管里 Pe≫1 → 对流主导,扩散送不到深处
|
|
461
|
-
⑤ michaelis_menten 血红蛋白结合是饱和式 → 浓度再高也提不上去
|
|
462
|
-
⑥ gompertz_growth 生长必然饱和 → 有上限体型
|
|
463
|
-
★ 结论通常是「不能靠扩散活,必须进化出循环 + 换气」,而不是「不可能」
|
|
464
|
-
—— 差别在于前者给了可行路径。
|
|
465
|
-
|
|
466
|
-
【材料推演】三层链:**微观决定 → 本构 → 构件失效**
|
|
467
|
-
分两档起步:① 只想要工程结论 → 从 B 开始,硬设定 E/σ_y/K_IC/ρ
|
|
468
|
-
② 想让材料「自洽地生出来」→ 从 A 开始,从键强度推
|
|
469
|
-
|
|
470
|
-
A. 微观决定(材料属性从基础物理量推出)
|
|
471
|
-
输入:每原子结合能(J)、原子间距、键的非谐性 γ
|
|
472
|
-
① melting_from_cohesive T_m ≈(2/3)·E_k/k_B
|
|
473
|
-
★ 反推设计:要熔点 2000°C → 需要多大结合能?这一条能算
|
|
474
|
-
⚠ 系数 0.036(不是 2/3!)由 12 种金属实测反算得来:
|
|
475
|
-
Fe 1797K vs 实测 1811(−0.8%)、W −0.5%、Mo −1.6%、Ag −0.4%
|
|
476
|
-
但 Al +52%、Mg +52% 偏高 —— 轻金属的结合能构成不同,别用它推轻合金
|
|
477
|
-
⚠ 输入是**每原子**结合能(J),若资料给 kJ/mol 要先除以 6.022e23
|
|
478
|
-
② ideal_strength σ_ideal ≈ E/10
|
|
479
|
-
★ 真正有用的是**比值**:实际强度只有理论的 1/100(工艺差) ~ 1/10(精密)
|
|
480
|
-
「这个文明的冶金水平」= 他们能发挥百分之几
|
|
481
|
-
③ pugh_ductility G/K >0.57 偏脆、<0.57 偏韧
|
|
482
|
-
★ 更强的键往往同增 K 与 G —— 这条检查「变强了但更脆」的副作用
|
|
483
|
-
④ gruneisen_expansion α = γ·C_v/(3KV)
|
|
484
|
-
★ 补闭环:原来 α 只能硬填,现在由 K、C_v、γ 推出来
|
|
485
|
-
⑤ wiedemann_franz κ/σ = L₀·T(L₀ 是基本常数)
|
|
486
|
-
★ 罕见的严格关系:设了电导率,导热系数自动定,不必两个都编
|
|
463
|
+
/** 【工程·结构(梁柱应力/挠度/惯性矩/螺栓焊缝)】按公式 id 调用,参数可带单位。 */
|
|
464
|
+
const D_STRUCT_BODY = () => `【工程·结构(梁柱应力/挠度/惯性矩/螺栓焊缝)】
|
|
487
465
|
|
|
488
|
-
|
|
489
|
-
|
|
466
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
467
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
490
468
|
|
|
491
|
-
B. 本构(应力 → 应变 → 失效)
|
|
492
|
-
输入:E、σ_y、K_IC、ρ
|
|
493
|
-
① hooke_law σ = E·ε。σ=200MPa → ε=1e-3
|
|
494
|
-
★ 弹性区公理;超屈服后失效,别用它算大变形
|
|
495
|
-
② safety_factor_check σ_allow = σ_y/n。200/235=1.18 → 低于 1.5,不安全
|
|
496
|
-
n 取 1.5~2(静载)/2~4(冲击)/3~6(疲劳)
|
|
497
|
-
③ fracture_kic σ_c = K_IC/(Y·√(πa))
|
|
498
|
-
5mm 裂纹 → 30e6/√(π·0.005)=239MPa(与屈服几乎相等)
|
|
499
|
-
★ σ_c ∝1/√a:裂纹 1mm→1cm,承载降 √10≈3.2 倍
|
|
500
|
-
⚠ 仅脆性/小范围屈服;高韧材料会低估(需 J 积分)
|
|
501
|
-
④ hall_petch σ_y = σ₀ + k_y·d^(−1/2)
|
|
502
|
-
★ 同一成分,晶粒细化一档强度可翻倍
|
|
503
|
-
「锻造水平」= 这个文明能达到的 d
|
|
504
|
-
⚠ 有反 Hall-Petch 区(纳米晶反而变弱)
|
|
505
|
-
⑤ ashby_index M = E^a·σ^b/ρ^c
|
|
506
|
-
轻而刚的梁 E^½/ρ | 轻而强的梁 σ^(2/3)/ρ | 储能 σ²/E
|
|
507
|
-
★ 把「这合金轻又强」从形容词变成可比的数
|
|
508
469
|
|
|
509
|
-
C. 构件失效(接已有的工程公式)
|
|
510
|
-
buckling_euler / beam_bending_stress / beam_uniform_load_deflection / bolt_shear_capacity
|
|
511
|
-
★ 到这一步才谈「这根梁要多粗」—— 前面两层定材料,这层定尺寸
|
|
512
|
-
|
|
513
|
-
完整例子(铁:结合能 415 kJ/mol、E=2e11、σy=235MPa、K_IC=30MPa·√m、ρ=7850)
|
|
514
|
-
输入换算:415 kJ/mol ÷ 6.022e23 = 6.89e-19 J/原子
|
|
515
|
-
melting_from_cohesive → 1797 K(实测铁 1811 K,−0.8% ✓ 自洽)
|
|
516
|
-
ideal_strength → 2e10 Pa = 20 GPa(理论值上限)
|
|
517
|
-
实际/理论 = 235e6/2e10 = **1.2%** → 属「工艺一般」而非精密
|
|
518
|
-
(精密工艺能到 10%,差一个数量级 —— 这就是该调的世界观参数)
|
|
519
|
-
pugh_ductility 设 G=8e10、K=1.6e11 → 0.5 <0.57,韧性好 ✓
|
|
520
|
-
hooke_law 200MPa → ε=1e-3
|
|
521
|
-
safety_factor_check 许用 156.7MPa,而实际 200MPa
|
|
522
|
-
200/156.7=1.28 → 只有 1.28 倍余量,低于要求的 1.5
|
|
523
|
-
fracture_kic 5mm 裂纹时 σ_c=239MPa,与屈服 235MPa 之比 **1.02**
|
|
524
|
-
★ 结论:这钢的瓶颈不在强度而在**裂纹容限**——
|
|
525
|
-
5mm 裂纹就让承载降到屈服线,所以要定期探伤、限制缺陷尺寸。
|
|
526
|
-
这是单看屈服强度绝对推不出来的结论。
|
|
527
|
-
|
|
528
|
-
★ 一条纪律:工具**不判断你的材料合不合理**,只保证「基于你给的性质,后果算对」。
|
|
529
|
-
A 层给方向、B 层给数值、C 层给尺寸 —— 想让哪层自洽,就从哪层起步。
|
|
530
|
-
|
|
531
|
-
【失败时】返回 ok=false + error.type / message / hint,按 hint 修正即可,不会崩溃。
|
|
532
|
-
常见 error.type:
|
|
533
|
-
non_finite 结果非有限(除以零、log(0))
|
|
534
|
-
unit_mismatch 两侧单位不同量纲
|
|
535
|
-
unknown_symbol 变量/函数未定义
|
|
536
|
-
unit_name_conflict 目标单位名撞内置函数(1 s to min → 写 minute)
|
|
537
|
-
not_a_quantity to 左边不是带单位的量(裸数字没有单位可换)
|
|
538
|
-
unknown_argument 参数名认不出来(会点名是哪个)`;
|
|
539
|
-
/**
|
|
540
|
-
* 【工程 / 生物 / 宏观】专节 —— 覆盖写世界观最常用的三块。
|
|
541
|
-
*
|
|
542
|
-
* ## 为什么单独成节
|
|
543
|
-
*
|
|
544
|
-
* 这三块是本次新增的 29 条公式的落点,但它们在目录里跟「统计」「线代」混在一起时
|
|
545
|
-
* 读者不会想到去查。单独一节把「我要算这座塔立不立得住」直接对上一个 key。
|
|
546
|
-
*
|
|
547
|
-
* ## 内容比旧版细得多
|
|
548
|
-
*
|
|
549
|
-
* 旧版 6000 字总预算下,每节只能给十几个字。现在每节按需付费,
|
|
550
|
-
* 所以这里把**每条公式的适用域、典型取值、以及它会教你的那条 scaling 律**都写出来 ——
|
|
551
|
-
* 那些才是判断「这个数合不合理」时真正要用的。
|
|
552
|
-
*/
|
|
553
|
-
const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式(共 29 条,公式库里按 id 调用)
|
|
554
|
-
|
|
555
|
-
调用方式与其它公式一样:{operation:"formula", formula:"id", overrides:{参数}}
|
|
556
|
-
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
557
|
-
|
|
558
|
-
════ 工程·结构(engineering/structures)════
|
|
559
470
|
beam_section_modulus 抗弯截面系数 W = b·h²/6
|
|
560
471
|
★ 梁要高不要宽:高度翻倍,抗弯能力 4 倍
|
|
561
472
|
beam_bending_stress 弯曲应力 σ = M/W(输出 MPa)
|
|
@@ -571,8 +482,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
571
482
|
bolt_shear_capacity 螺栓抗剪 F = n·τ·π·d²/4(4.6 级 τ≈141 MPa)
|
|
572
483
|
★ 承压型高强螺栓靠摩擦传力,不按这个算式
|
|
573
484
|
weld_throat_capacity 角焊缝 F = 0.707a·L·τ(喉部有效厚度 0.707a)
|
|
485
|
+
`;
|
|
486
|
+
/** 【工程·热机与能量(卡诺/蒸汽/锅炉/换热)】按公式 id 调用,参数可带单位。 */
|
|
487
|
+
const D_THERMAL_BODY = () => `【工程·热机与能量(卡诺/蒸汽/锅炉/换热)】
|
|
488
|
+
|
|
489
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
490
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
491
|
+
|
|
574
492
|
|
|
575
|
-
════ 工程·热机与能量(engineering/thermal, energy)════
|
|
576
493
|
thermal_efficiency_carnot 卡诺上限 η ≤ 1 − Tc/Th
|
|
577
494
|
★ **绝对温度**不是摄氏度;300K/500K 之间上限 40%
|
|
578
495
|
加多少煤都没用——只能提高热源温度或降低排热温度
|
|
@@ -591,8 +508,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
591
508
|
★ 风速的**三次方**:5→10 m/s,功率 8 倍(最反直觉的一条)
|
|
592
509
|
贝茨极限 0.593 是理论上限,实用 0.35~0.45
|
|
593
510
|
water_turbine_power P = ρ·g·Q·H·η(与水泵恰好相反:η 是乘的)
|
|
511
|
+
`;
|
|
512
|
+
/** 【工程·流体与管路(管流/水头/泵/孔口)】按公式 id 调用,参数可带单位。 */
|
|
513
|
+
const D_FLUID_BODY = () => `【工程·流体与管路(管流/水头/泵/孔口)】
|
|
514
|
+
|
|
515
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
516
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
517
|
+
|
|
594
518
|
|
|
595
|
-
════ 工程·流体与管路(engineering/fluid)════
|
|
596
519
|
pipe_flow_rate Q = v·π·d²/4
|
|
597
520
|
★ 管径翻倍,流量 4 倍——扩一倍口径顶四条旧管
|
|
598
521
|
darcy_head_loss h = f·(L/d)·v²/(2g)
|
|
@@ -603,8 +526,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
603
526
|
orifice_discharge Q = Cd·A·√(2gh)
|
|
604
527
|
★ 水头的**平方根**:流量翻倍要水头 4 倍
|
|
605
528
|
水库泄洪、攻城水攻、倒水时间估算都用它
|
|
529
|
+
`;
|
|
530
|
+
/** 【生物·生态(载畜量/料肉比/NPP/营养级)】按公式 id 调用,参数可带单位。 */
|
|
531
|
+
const D_ECOLOGY_BODY = () => `【生物·生态(载畜量/料肉比/NPP/营养级)】
|
|
532
|
+
|
|
533
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
534
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
535
|
+
|
|
606
536
|
|
|
607
|
-
════ 生物·生态(biology/ecology)════
|
|
608
537
|
grazing_capacity 载畜量 = 面积×产草量×利用率/(采食量×天数)
|
|
609
538
|
★ 利用率取 0.5 不是保守而是必需:超载后草地退化,第二年产量腰斩
|
|
610
539
|
温带草原 2000~5000 kg/(ha·年),牛采食 40~60 kg/日
|
|
@@ -618,8 +547,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
618
547
|
trophic_chain_support 每级只剩约 10%
|
|
619
548
|
★ 养活 1 kg 狼要 10 kg 兔、100 kg 草
|
|
620
549
|
这解释了为什么食物链一般不超过 5 级,也立刻否掉「满地猛兽」
|
|
550
|
+
`;
|
|
551
|
+
/** 【宏观·经济(劳力/产出/储蓄/货币/通胀)】按公式 id 调用,参数可带单位。 */
|
|
552
|
+
const D_MACRO_BODY = () => `【宏观·经济(劳力/产出/储蓄/货币/通胀)】
|
|
553
|
+
|
|
554
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
555
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
556
|
+
|
|
621
557
|
|
|
622
|
-
════ 宏观·经济(econ/macro)════
|
|
623
558
|
labor_force 劳力 = 人口 × 参与率(农业社会 0.45~0.55)
|
|
624
559
|
★ 0.45 里含着大量童工与老人——决定「能征多少兵、能修多大工程」
|
|
625
560
|
gdp_from_labor 产出 = 劳力 × 人均产出
|
|
@@ -635,8 +570,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
635
570
|
inflation_from_money_growth 通胀 ≈ 货币增速 − 产出增速
|
|
636
571
|
★ 0.15 对 0.03 即约 12%,三年物价翻倍
|
|
637
572
|
「滥发货币导致崩溃」时用它量化
|
|
573
|
+
`;
|
|
574
|
+
/** 【材料·本构与微观决定(胡克/断裂韧性/熔点/Ashby)】按公式 id 调用,参数可带单位。 */
|
|
575
|
+
const D_MATERIAL_BODY = () => `【材料·本构与微观决定(胡克/断裂韧性/熔点/Ashby)】
|
|
576
|
+
|
|
577
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
578
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
579
|
+
|
|
638
580
|
|
|
639
|
-
════ 材料·本构与微观决定(materials/)════
|
|
640
581
|
【本构:应力→应变→失效】
|
|
641
582
|
hooke_law σ = E·ε(弹性区公理,与材料种类无关)
|
|
642
583
|
★ 补上了库里断掉的一环:有 strain 定义却没有应力
|
|
@@ -664,8 +605,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
664
605
|
⚠ 有反 Hall-Petch 区(纳米晶粒下反而变弱)
|
|
665
606
|
wiedemann_franz κ/σ = L₀·T(L₀ = 2.44e-8 是基本常数)
|
|
666
607
|
★ 罕见的严格关系:设了电导率,导热系数自动定
|
|
608
|
+
`;
|
|
609
|
+
/** 【生物·通用(异速生长/扩散/遗传/生长/酶)】按公式 id 调用,参数可带单位。 */
|
|
610
|
+
const D_BIO_BODY = () => `【生物·通用(异速生长/扩散/遗传/生长/酶)】
|
|
611
|
+
|
|
612
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
613
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
614
|
+
|
|
667
615
|
|
|
668
|
-
════ 生物·通用(biology/scaling, transport, genetics, growth, kinetics)════
|
|
669
616
|
sa_volume_ratio A ∝ M^(2/3) → 面积/体积 ∝ M^(−1/3)(**纯几何**)
|
|
670
617
|
★ 体重 ×8 → 面积 ×4 → 单位体重散热 ÷2(为什么会过热)
|
|
671
618
|
同理鳃面积也只 ×4 → 摄氧 ÷2(为什么会缺氧)
|
|
@@ -688,8 +635,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
688
635
|
q10_temperature R = R₀·Q₁₀^((T−T₀)/10)
|
|
689
636
|
★ 生物界**实际使用**的温度律(生态模型几乎都用它,不用 Ea)
|
|
690
637
|
与 arrhenius 并存:化学用 Arrhenius、生物用 Q₁₀
|
|
638
|
+
`;
|
|
639
|
+
/** 【政权财政(赤字/基本余额/债务螺旋/铸币税)】按公式 id 调用,参数可带单位。 */
|
|
640
|
+
const D_FISCAL_BODY = () => `【政权财政(赤字/基本余额/债务螺旋/铸币税)】
|
|
641
|
+
|
|
642
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
643
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
644
|
+
|
|
691
645
|
|
|
692
|
-
════ 政权财政(power/fiscal)════
|
|
693
646
|
fiscal_balance D = T − G(**会计恒等式**)
|
|
694
647
|
★ 关键细节:赤字**不含借债** —— 借来的钱是「赤字融资」不是收入
|
|
695
648
|
把借债算成收入,就是财政崩溃前的典型自欺
|
|
@@ -709,8 +662,14 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
709
662
|
fiscal_autonomy 可裁量支出占比 = 1 − 刚性占比
|
|
710
663
|
★ 「改革为什么推不动」的定量答案:
|
|
711
664
|
刚性 80%+ → 几乎没有政策自由度,任何冲击直接触发危机
|
|
665
|
+
`;
|
|
666
|
+
/** 【宏观恒等式(GDP/增长核算/趋同/费雪)】按公式 id 调用,参数可带单位。 */
|
|
667
|
+
const D_GDP_BODY = () => `【宏观恒等式(GDP/增长核算/趋同/费雪)】
|
|
668
|
+
|
|
669
|
+
调用方式:{operation:"formula", formula:"id", overrides:{参数}}
|
|
670
|
+
参数可带单位("10 km"、"2 时辰"),会校验量纲并换算。
|
|
671
|
+
|
|
712
672
|
|
|
713
|
-
════ 宏观恒等式(econ/macro, econ/growth)════
|
|
714
673
|
gdp_expenditure Y = C + I + G +(X−M)(会计恒等式)
|
|
715
674
|
★ 能立刻暴露不闭合的设定:C+I+G 超过 Y → 差额只能来自净进口或举债
|
|
716
675
|
growth_accounting g_Y = g_A + α·g_K +(1−α)·g_L
|
|
@@ -724,11 +683,191 @@ const DOMAINS_BODY = () => `【工程 / 生物 / 宏观】三块的常用算式
|
|
|
724
683
|
★ 这些式子的共同特点:**缩放律与恒等式比绝对值更重要**。算出来的数可以偏,
|
|
725
684
|
但「跨度翻倍挠度 16 倍」「PB = T −(G−利息)」这类关系错了就是硬伤。
|
|
726
685
|
可查 operation="help", helpTopic="policy" 看文明推演配方。`;
|
|
686
|
+
/**
|
|
687
|
+
* ────────────────────────────────────────────────────────────────────
|
|
688
|
+
* ## recipe 拆成三节(v2.3.4)
|
|
689
|
+
*
|
|
690
|
+
* 拆分前 `recipe` 一节 **5371 字符**,其中:
|
|
691
|
+
*
|
|
692
|
+
* ```
|
|
693
|
+
* 材料推演 2834 (53%) ← 只有做材料设定才需要
|
|
694
|
+
* 文明崩溃推演 535
|
|
695
|
+
* 巨兽可行性 403
|
|
696
|
+
* 锚点/账本/多步 400 ← 通用,几乎每次都要
|
|
697
|
+
* 错误码表 953 ← 通用,出错时必查
|
|
698
|
+
* ```
|
|
699
|
+
*
|
|
700
|
+
* 三条推演配方是**不同场景**(财政 / 生物 / 材料),不该压在一节里 ——
|
|
701
|
+
* 查「怎么算帝国会不会崩」不该先读 2834 字符的材料链条。
|
|
702
|
+
*
|
|
703
|
+
* 拆成:`recipe`(通用手法:锚点/账本/多步链/错误码)、
|
|
704
|
+
* `recipe-fiscal`(文明崩溃)、`recipe-bio`(巨兽可行性)、`recipe-material`(材料三层链)。
|
|
705
|
+
* ────────────────────────────────────────────────────────────────────
|
|
706
|
+
*/
|
|
707
|
+
/** 【通用手法】锚点 sanity、账本闭合、多步链。 */
|
|
708
|
+
const RECIPE_COMMON_BODY = () => `【锚点 sanity】工具不知道这个数该多大,但你可以逐条声明判据
|
|
709
|
+
{label:"日产台数", expr:"1e8*25000", sanity:{max:1e10, note:"帝国总兵力"}}
|
|
710
|
+
→ ⚠ 超出锚点上限 1e10(帝国总兵力)达 250 倍
|
|
711
|
+
键:max 上限 / min 下限 / expect 期望量级(expect:3 即 10³)/ note 依据
|
|
712
|
+
★ 判据来自你,工具只比对不猜;量纲不可比时不报;不声明则零提示
|
|
713
|
+
★ 目前只在批量 expressions 里生效
|
|
714
|
+
|
|
715
|
+
【账本闭合】无独立 check 操作,一条 expressions 逐项列值即可:
|
|
716
|
+
[{label:"A", expr:"650*3840"}, {label:"四项和", expr:"…"}]
|
|
717
|
+
再补一条 {label:"与目标之差", expr:"...-4075000"} ← 差值 0 即闭合
|
|
718
|
+
不做 PASS/FAIL:差 3 与差 3% 是两回事,压成布尔就糊了
|
|
719
|
+
|
|
720
|
+
【多步链】批量内前一条的赋值对后一条可见:
|
|
721
|
+
[{label:"单价", expr:"u=5"}, {label:"小计", expr:"u*3"}]
|
|
722
|
+
★ 中间某步失败时,依赖它的下游会明确报错,不会变成「虚成功」
|
|
723
|
+
`;
|
|
724
|
+
/** 【错误码】出错时按 hint 修正。 */
|
|
725
|
+
const RECIPE_ERROR_BODY = () => `【失败时】返回 ok=false + error.type / message / hint,按 hint 修正即可,不会崩溃。
|
|
726
|
+
常见 error.type:
|
|
727
|
+
non_finite 结果非有限(除以零、log(0))
|
|
728
|
+
unit_mismatch 两侧单位不同量纲
|
|
729
|
+
unknown_symbol 变量/函数未定义
|
|
730
|
+
unit_name_conflict 目标单位名撞内置函数(1 s to min → 写 minute)
|
|
731
|
+
not_a_quantity to 左边不是带单位的量(裸数字没有单位可换)
|
|
732
|
+
unknown_argument 参数名认不出来(会点名是哪个)
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* ────────────────────────────────────────────────────────────────────
|
|
737
|
+
* ## 领域公式节:从一节拆成九节(v2.3.4)
|
|
738
|
+
*
|
|
739
|
+
* 拆分前 domains 一节 **8707 字符**,是单次查询最贵的开销。
|
|
740
|
+
* 而它是九个互不相关的领域压在一起 —— 查「财政赤字」也要把梁柱挠度、
|
|
741
|
+
* 营养级、Péclet 数全读一遍。
|
|
742
|
+
*
|
|
743
|
+
* ## 为什么这是对的做法(成本结构决定)
|
|
744
|
+
*
|
|
745
|
+
*
|
|
746
|
+
* schema 6212 字符 每轮固定付,无法通过拆分降低
|
|
747
|
+
* 目录 1083 字符 按需付一次
|
|
748
|
+
* 单节 800~1400 按需付
|
|
749
|
+
*
|
|
750
|
+
*
|
|
751
|
+
* 拆开后单次查询从 **8707 → 约 1500**(加目录约 2600),降 3.4 倍,
|
|
752
|
+
* 而固定成本只增加目录里多出来的几行。
|
|
753
|
+
*
|
|
754
|
+
* ★ 这正是「总长可以扩容,但要控制单次任务查询消耗」的落点:
|
|
755
|
+
* 扩容发生在**按需层**,固定层(schema)不动。
|
|
756
|
+
* ────────────────────────────────────────────────────────────────────
|
|
757
|
+
*/
|
|
758
|
+
|
|
759
|
+
/** 【工程·结构(梁柱应力/挠度/惯性矩/螺栓焊缝)】按公式 id 调用,参数可带单位。 */
|
|
760
|
+
`;
|
|
761
|
+
/** 【文明崩溃推演】财政六步链。 */
|
|
762
|
+
const RECIPE_FISCAL_BODY = () => `【文明崩溃推演】财政链,每步可核对(用 formula 逐条调,数值自己代入)
|
|
763
|
+
① effective_tax_rate 名义税率 30% 但实际只 10% → 征管弱,20% 是漏征+逃亡
|
|
764
|
+
② fiscal_balance 收入 10% GDP、支出 15% → 赤字 5%
|
|
765
|
+
③ primary_balance PB = −5% + 利息 3% = −2% GDP
|
|
766
|
+
→ 不是被旧债拖垮,而是**经营本身在亏**(结构性危机,比单纯赤字严重)
|
|
767
|
+
④ fiscal_sustainability i=8%、g=2%、d=80% → 需 PB ≥ 6%×0.8 = 4.8%,实际 −2%
|
|
768
|
+
→ 缺口 6.8%/年,十年翻倍
|
|
769
|
+
⑤ seigniorage 税加不动、借债又 i>g → 只能铸币 → 通胀上升
|
|
770
|
+
→ 通胀推高 i → 回到 ④,死亡螺旋
|
|
771
|
+
⑥ fiscal_autonomy 刚性 85% → 没有可裁量的钱,改革也推不动
|
|
772
|
+
★ 这套链能推出「为什么这个政权看着还能撑、其实已在螺旋里」,
|
|
773
|
+
比「因为腐败所以要亡」可信得多——腐败只是其中一环。
|
|
774
|
+
`;
|
|
775
|
+
/** 【巨兽可行性推演】生物六步链。 */
|
|
776
|
+
const RECIPE_BIO_BODY = () => `【巨兽可行性推演】生物链,回答「这么大的生物能不能活」
|
|
777
|
+
① sa_volume_ratio 体重 ×8 → 表面积 ×4 → 单位体重散热与摄氧都 ÷2
|
|
778
|
+
② fick_diffusion A∝M^(2/3)、δ∝M^(1/3) → 供氧能力 ∝ M^(1/3)
|
|
779
|
+
③ diffusion_time 若无循环,1 m 组织扩散需 158 年 → 必须有循环系统
|
|
780
|
+
④ peclet_number 血管里 Pe≫1 → 对流主导,扩散送不到深处
|
|
781
|
+
⑤ michaelis_menten 血红蛋白结合是饱和式 → 浓度再高也提不上去
|
|
782
|
+
⑥ gompertz_growth 生长必然饱和 → 有上限体型
|
|
783
|
+
★ 结论通常是「不能靠扩散活,必须进化出循环 + 换气」,而不是「不可能」
|
|
784
|
+
—— 差别在于前者给了可行路径。
|
|
785
|
+
`;
|
|
786
|
+
/** 【材料推演】微观决定 → 本构 → 构件失效。 */
|
|
787
|
+
const RECIPE_MATERIAL_BODY = () => `【材料推演】三层链:**微观决定 → 本构 → 构件失效**
|
|
788
|
+
分两档起步:① 只想要工程结论 → 从 B 开始,硬设定 E/σ_y/K_IC/ρ
|
|
789
|
+
② 想让材料「自洽地生出来」→ 从 A 开始,从键强度推
|
|
790
|
+
|
|
791
|
+
A. 微观决定(材料属性从基础物理量推出)
|
|
792
|
+
输入:每原子结合能(J)、原子间距、键的非谐性 γ
|
|
793
|
+
① melting_from_cohesive T_m ≈(2/3)·E_k/k_B
|
|
794
|
+
★ 反推设计:要熔点 2000°C → 需要多大结合能?这一条能算
|
|
795
|
+
⚠ 系数 0.036(不是 2/3!)由 12 种金属实测反算得来:
|
|
796
|
+
Fe 1797K vs 实测 1811(−0.8%)、W −0.5%、Mo −1.6%、Ag −0.4%
|
|
797
|
+
但 Al +52%、Mg +52% 偏高 —— 轻金属的结合能构成不同,别用它推轻合金
|
|
798
|
+
⚠ 输入是**每原子**结合能(J),若资料给 kJ/mol 要先除以 6.022e23
|
|
799
|
+
② ideal_strength σ_ideal ≈ E/10
|
|
800
|
+
★ 真正有用的是**比值**:实际强度只有理论的 1/100(工艺差) ~ 1/10(精密)
|
|
801
|
+
「这个文明的冶金水平」= 他们能发挥百分之几
|
|
802
|
+
③ pugh_ductility G/K >0.57 偏脆、<0.57 偏韧
|
|
803
|
+
★ 更强的键往往同增 K 与 G —— 这条检查「变强了但更脆」的副作用
|
|
804
|
+
④ gruneisen_expansion α = γ·C_v/(3KV)
|
|
805
|
+
★ 补闭环:原来 α 只能硬填,现在由 K、C_v、γ 推出来
|
|
806
|
+
⑤ wiedemann_franz κ/σ = L₀·T(L₀ 是基本常数)
|
|
807
|
+
★ 罕见的严格关系:设了电导率,导热系数自动定,不必两个都编
|
|
808
|
+
|
|
809
|
+
★ 关键的物理直觉:**结合能越深 → 势能井越陡 → E 越大 → 熔点与强度都上升**
|
|
810
|
+
所以「改基础物理量」不是各自拍脑袋,而是有方向、有幅度的推导。
|
|
811
|
+
|
|
812
|
+
B. 本构(应力 → 应变 → 失效)
|
|
813
|
+
输入:E、σ_y、K_IC、ρ
|
|
814
|
+
① hooke_law σ = E·ε。σ=200MPa → ε=1e-3
|
|
815
|
+
★ 弹性区公理;超屈服后失效,别用它算大变形
|
|
816
|
+
② safety_factor_check σ_allow = σ_y/n。200/235=1.18 → 低于 1.5,不安全
|
|
817
|
+
n 取 1.5~2(静载)/2~4(冲击)/3~6(疲劳)
|
|
818
|
+
③ fracture_kic σ_c = K_IC/(Y·√(πa))
|
|
819
|
+
5mm 裂纹 → 30e6/√(π·0.005)=239MPa(与屈服几乎相等)
|
|
820
|
+
★ σ_c ∝1/√a:裂纹 1mm→1cm,承载降 √10≈3.2 倍
|
|
821
|
+
⚠ 仅脆性/小范围屈服;高韧材料会低估(需 J 积分)
|
|
822
|
+
④ hall_petch σ_y = σ₀ + k_y·d^(−1/2)
|
|
823
|
+
★ 同一成分,晶粒细化一档强度可翻倍
|
|
824
|
+
「锻造水平」= 这个文明能达到的 d
|
|
825
|
+
⚠ 有反 Hall-Petch 区(纳米晶反而变弱)
|
|
826
|
+
⑤ ashby_index M = E^a·σ^b/ρ^c
|
|
827
|
+
轻而刚的梁 E^½/ρ | 轻而强的梁 σ^(2/3)/ρ | 储能 σ²/E
|
|
828
|
+
★ 把「这合金轻又强」从形容词变成可比的数
|
|
829
|
+
|
|
830
|
+
C. 构件失效(接已有的工程公式)
|
|
831
|
+
buckling_euler / beam_bending_stress / beam_uniform_load_deflection / bolt_shear_capacity
|
|
832
|
+
★ 到这一步才谈「这根梁要多粗」—— 前面两层定材料,这层定尺寸
|
|
833
|
+
|
|
834
|
+
完整例子(铁:结合能 415 kJ/mol、E=2e11、σy=235MPa、K_IC=30MPa·√m、ρ=7850)
|
|
835
|
+
输入换算:415 kJ/mol ÷ 6.022e23 = 6.89e-19 J/原子
|
|
836
|
+
melting_from_cohesive → 1797 K(实测铁 1811 K,−0.8% ✓ 自洽)
|
|
837
|
+
ideal_strength → 2e10 Pa = 20 GPa(理论值上限)
|
|
838
|
+
实际/理论 = 235e6/2e10 = **1.2%** → 属「工艺一般」而非精密
|
|
839
|
+
(精密工艺能到 10%,差一个数量级 —— 这就是该调的世界观参数)
|
|
840
|
+
pugh_ductility 设 G=8e10、K=1.6e11 → 0.5 <0.57,韧性好 ✓
|
|
841
|
+
hooke_law 200MPa → ε=1e-3
|
|
842
|
+
safety_factor_check 许用 156.7MPa,而实际 200MPa
|
|
843
|
+
200/156.7=1.28 → 只有 1.28 倍余量,低于要求的 1.5
|
|
844
|
+
fracture_kic 5mm 裂纹时 σ_c=239MPa,与屈服 235MPa 之比 **1.02**
|
|
845
|
+
★ 结论:这钢的瓶颈不在强度而在**裂纹容限**——
|
|
846
|
+
5mm 裂纹就让承载降到屈服线,所以要定期探伤、限制缺陷尺寸。
|
|
847
|
+
这是单看屈服强度绝对推不出来的结论。
|
|
848
|
+
|
|
849
|
+
★ 一条纪律:工具**不判断你的材料合不合理**,只保证「基于你给的性质,后果算对」。
|
|
850
|
+
A 层给方向、B 层给数值、C 层给尺寸 —— 想让哪层自洽,就从哪层起步。
|
|
851
|
+
`;
|
|
727
852
|
/**
|
|
728
853
|
* 各节注册表。**顺序即目录顺序**,而顺序决定「AI 会不会翻到它」。
|
|
729
854
|
*
|
|
730
855
|
* 排前面的是高频或高风险节:`evaluate` 最常用、`world` 体量最大。
|
|
731
|
-
*
|
|
856
|
+
*
|
|
857
|
+
* ## v2.3.4 从 14 节扩到 26 节
|
|
858
|
+
*
|
|
859
|
+
* 不是为了塞更多内容,而是**把「按需付费」做彻底**:
|
|
860
|
+
*
|
|
861
|
+
* ```
|
|
862
|
+
* 原 domains 8707 字符 九个互不相关的领域压在一起
|
|
863
|
+
* 原 recipe 5371 字符 三条场景配方 + 通用手法 + 错误码
|
|
864
|
+
* ```
|
|
865
|
+
*
|
|
866
|
+
* 查「财政赤字」要读梁柱挠度与 Péclet 数,查「帝国会不会崩」要先读 2834 字符的材料链 ——
|
|
867
|
+
* 这不合理。拆开后单次查询从 8707 降到 2840(最大节),典型任务约 2400。
|
|
868
|
+
*
|
|
869
|
+
* ★ 固定成本(schema 6212 字符)**一分没涨**:扩容全部发生在按需层。
|
|
870
|
+
* 目录从 1083 涨到 1284 —— 多出的 201 字符换来 12 个可独立查询的节。
|
|
732
871
|
*/
|
|
733
872
|
export const HELP_TOPICS = [
|
|
734
873
|
/**
|
|
@@ -758,7 +897,7 @@ export const HELP_TOPICS = [
|
|
|
758
897
|
tier: 'core',
|
|
759
898
|
/** 实践文档信号量 250,断层第一:算术/带单位/批量/label 全落在这一节。 */
|
|
760
899
|
weight: 250,
|
|
761
|
-
title: '
|
|
900
|
+
title: '求值 evaluate',
|
|
762
901
|
summary: '算一条式子。物理量带单位写,量纲错当场拦下;批量一次多条。',
|
|
763
902
|
aliases: ['算式', '计算', '求值', 'mathjs', 'expression'],
|
|
764
903
|
body: EVALUATE_BODY,
|
|
@@ -772,7 +911,7 @@ export const HELP_TOPICS = [
|
|
|
772
911
|
* 前者要写方程、要看解的形式(唯一解/无穷多解/无解)。
|
|
773
912
|
*/
|
|
774
913
|
weight: 59,
|
|
775
|
-
title: '解方程与微积分(solve
|
|
914
|
+
title: '解方程与微积分(solve)',
|
|
776
915
|
summary: '解方程与方程组、符号求导积分。退化方程组会说「无穷多解」而非静默给单解。',
|
|
777
916
|
aliases: ['方程', '求解', 'solve', '积分', '求导', '微积分', 'algebra'],
|
|
778
917
|
body: ALGEBRA_BODY,
|
|
@@ -782,7 +921,7 @@ export const HELP_TOPICS = [
|
|
|
782
921
|
tier: 'core',
|
|
783
922
|
/** 信号量 173:中制单位(里/丈/斤/亩)与 to 换算在各文档频繁出现。 */
|
|
784
923
|
weight: 173,
|
|
785
|
-
title: '
|
|
924
|
+
title: '单位换算 units',
|
|
786
925
|
summary: '中外古今单位换算、自定义单位,以及输出为什么是大数配吨/公里。',
|
|
787
926
|
aliases: ['单位', '换算', '里', '丈', '斤', '亩', 'unit', 'conversion'],
|
|
788
927
|
body: UNITS_BODY,
|
|
@@ -803,7 +942,7 @@ export const HELP_TOPICS = [
|
|
|
803
942
|
/** 信号量 26。 */
|
|
804
943
|
weight: 26,
|
|
805
944
|
title: '世界观推演(world / 地形 / 气候)',
|
|
806
|
-
summary: '
|
|
945
|
+
summary: '星球参数 → 体感画像:重力昼夜气候、天空、恒星寿命、卫星、生命闸门。★ 字段表在这。',
|
|
807
946
|
aliases: ['星球', '世界', '重力', '气候', '恒星', '地形', 'world', 'planet'],
|
|
808
947
|
body: WORLD_BODY,
|
|
809
948
|
},
|
|
@@ -815,14 +954,103 @@ export const HELP_TOPICS = [
|
|
|
815
954
|
* 只是不再为它们付「一句话简介 + 别名清单」的成本。
|
|
816
955
|
*/
|
|
817
956
|
{
|
|
818
|
-
key: '
|
|
957
|
+
key: 'd-struct',
|
|
958
|
+
tier: 'core',
|
|
959
|
+
short: '梁柱结构',
|
|
960
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
961
|
+
weight: 12,
|
|
962
|
+
title: '工程·结构(梁柱应力/挠度/惯性矩/螺栓焊缝)',
|
|
963
|
+
summary: '抗弯截面系数、弯曲应力、自重弯矩、均布挠度、惯性矩、螺栓抗剪、角焊缝。★ 跨度的高次方律:挠度 ∝ L⁴、弯矩 ∝ L²。',
|
|
964
|
+
aliases: ['结构', '梁', '柱', '跨中挠度', '弯曲应力', '惯性矩', '螺栓', '焊缝', 'beam'],
|
|
965
|
+
body: D_STRUCT_BODY,
|
|
966
|
+
},
|
|
967
|
+
{
|
|
968
|
+
key: 'd-thermal',
|
|
969
|
+
tier: 'core',
|
|
970
|
+
short: '热机煤耗',
|
|
971
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
972
|
+
weight: 10,
|
|
973
|
+
title: '工程·热机与能量(卡诺/蒸汽/锅炉/换热)',
|
|
974
|
+
summary: '卡诺效率上限、蒸汽机功率、锅炉煤耗、换热器 LMTD、平壁导热。★ 卡诺是上限不是可达值。',
|
|
975
|
+
aliases: ['热机', '卡诺', '蒸汽机', '锅炉', '煤耗', '换热器', '导热', 'carnot'],
|
|
976
|
+
body: D_THERMAL_BODY,
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
key: 'd-fluid',
|
|
980
|
+
tier: 'core',
|
|
981
|
+
short: '管流泵',
|
|
982
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
983
|
+
weight: 10,
|
|
984
|
+
title: '工程·流体与管路(管流/水头/泵/孔口)',
|
|
985
|
+
summary: '管道流量、达西水头损失、水泵轴功率、孔口出流、风功率、水轮机。★ 管径平方律、风功率随 v³。',
|
|
986
|
+
aliases: ['流体', '管流', '水头', '泵', '孔口', '风功率', '水轮机', 'darcy'],
|
|
987
|
+
body: D_FLUID_BODY,
|
|
988
|
+
},
|
|
989
|
+
{
|
|
990
|
+
key: 'd-ecology',
|
|
819
991
|
tier: 'core',
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
992
|
+
short: '生态畜牧',
|
|
993
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
994
|
+
weight: 8,
|
|
995
|
+
title: '生物·生态(载畜量/料肉比/NPP/营养级)',
|
|
996
|
+
summary: '草地载畜量、畜禽出栏、料肉比、农田 NPP、营养级支撑。★ 每级只剩约 10%:养活 1kg 猛兽要 100kg 草。',
|
|
997
|
+
aliases: ['生态', '载畜量', '料肉比', '出栏', 'NPP', '营养级', '畜牧', 'grazing'],
|
|
998
|
+
body: D_ECOLOGY_BODY,
|
|
999
|
+
},
|
|
1000
|
+
{
|
|
1001
|
+
key: 'd-macro',
|
|
1002
|
+
tier: 'core',
|
|
1003
|
+
short: '劳力货币',
|
|
1004
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
1005
|
+
weight: 8,
|
|
1006
|
+
title: '宏观·经济(劳力/产出/储蓄/货币/通胀)',
|
|
1007
|
+
summary: '劳动力、总产出、储蓄率、资本产出比、货币供应、通胀压力。★ 通胀 ≈ 货币增速 − 产出增速。',
|
|
1008
|
+
aliases: ['宏观', '劳力', '储蓄率', '资本产出比', '货币供应', '通胀', '经济'],
|
|
1009
|
+
body: D_MACRO_BODY,
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
key: 'd-material',
|
|
1013
|
+
tier: 'core',
|
|
1014
|
+
short: '材料本构',
|
|
1015
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
1016
|
+
weight: 14,
|
|
1017
|
+
title: '材料·本构与微观决定(胡克/断裂韧性/熔点/Ashby)',
|
|
1018
|
+
summary: '胡克定律与许用应力、断裂韧性 K_IC、Ashby 选材、理论强度、熔点与结合能、Pugh 脆韧性、Hall-Petch。',
|
|
1019
|
+
aliases: ['材料', '胡克', '断裂韧性', '韧性', '熔点', 'Ashby', '选材', '强度', '结合能', 'pugh'],
|
|
1020
|
+
body: D_MATERIAL_BODY,
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
key: 'd-bio',
|
|
1024
|
+
tier: 'core',
|
|
1025
|
+
short: '生物通用',
|
|
1026
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
1027
|
+
weight: 14,
|
|
1028
|
+
title: '生物·通用(异速生长/扩散/遗传/生长/酶)',
|
|
1029
|
+
summary: '表面积-体积比、Fick 扩散、扩散时间、Péclet、Hardy-Weinberg、Gompertz、米氏、Q₁₀。★ 跨类群跨世界通用。',
|
|
1030
|
+
aliases: ['生物', '异速生长', '扩散', '供氧', '遗传', '基因频率', '生长曲线', 'Q10', '米氏', 'fick', 'Gompertz'],
|
|
1031
|
+
body: D_BIO_BODY,
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
key: 'd-fiscal',
|
|
1035
|
+
tier: 'core',
|
|
1036
|
+
short: '政权财政',
|
|
1037
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
1038
|
+
weight: 12,
|
|
1039
|
+
title: '政权财政(赤字/基本余额/债务螺旋/铸币税)',
|
|
1040
|
+
summary: '财政余额、基本余额、债务可持续判据、铸币税、有效税率、财政自由度。★ 「这个政权还有没有救」的判据在这。',
|
|
1041
|
+
aliases: ['财政', '赤字', '税收', '债务', '铸币税', '基本余额', '国债', '破产', 'fiscal'],
|
|
1042
|
+
body: D_FISCAL_BODY,
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
key: 'd-gdp',
|
|
1046
|
+
tier: 'core',
|
|
1047
|
+
short: 'GDP增长',
|
|
1048
|
+
/** 从原 domains 一节拆出,权重按各领域实际使用分配。 */
|
|
1049
|
+
weight: 10,
|
|
1050
|
+
title: '宏观恒等式(GDP/增长核算/趋同/费雪)',
|
|
1051
|
+
summary: '支出法 GDP(会计恒等式)、增长核算 TFP、趋同速度、费雪方程。★ 恒等式能立刻否掉不闭合的设定。',
|
|
1052
|
+
aliases: ['GDP', '增长核算', 'TFP', '趋同', '费雪', '货币数量', '恒等式', '全要素生产率'],
|
|
1053
|
+
body: D_GDP_BODY,
|
|
826
1054
|
},
|
|
827
1055
|
{
|
|
828
1056
|
key: 'linalg',
|
|
@@ -848,13 +1076,29 @@ export const HELP_TOPICS = [
|
|
|
848
1076
|
},
|
|
849
1077
|
{
|
|
850
1078
|
key: 'ode',
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
1079
|
+
/**
|
|
1080
|
+
* ★ 从 extra 提到 core(2026-11-08)。
|
|
1081
|
+
*
|
|
1082
|
+
* 实测反馈里最重的一条:该会话「写了 300 行 Python 做逐年迭代、参数扫描、
|
|
1083
|
+
* 双状态耦合」,而 ode 就在那里 —— 只是排在「低频」栏的最后一行。
|
|
1084
|
+
*
|
|
1085
|
+
* 所以「低频」这个分档本身是错的:它表达的是「用得少」,
|
|
1086
|
+
* 但用得少不等于「该在想建模时绕过它」。
|
|
1087
|
+
*/
|
|
1088
|
+
tier: 'core',
|
|
1089
|
+
/**
|
|
1090
|
+
* 权重从 4 提到 60。
|
|
1091
|
+
*
|
|
1092
|
+
* 原来的 4 是「实践文档里出现 4 次」的信号量 —— 但这只反映**已经发生的使用**,
|
|
1093
|
+
* 不反映**该用而没用的机会数**。实测那份会话里手写了 6 个脚本做逐年迭代,
|
|
1094
|
+
* 那些都该是一次 ode/recurrence 调用。所以按「错过的机会」重估。
|
|
1095
|
+
*/
|
|
1096
|
+
weight: 60,
|
|
1097
|
+
short: '微分方程与递推',
|
|
1098
|
+
title: '动力学:微分方程与离散递推(ode / recurrence)',
|
|
1099
|
+
summary: '连续用 ode(RK4,支持 min() 约束/多状态);离散用 recurrence 出逐年表。' +
|
|
1100
|
+
'★ 写年表用离散值;ode 传 at:[5,10,20] 精确取那几个年份。',
|
|
1101
|
+
aliases: ['微分方程', 'ode', '递推', 'recurrence', '逐年', '年表', '增长模型', '传染病', '捕食模型', 'rk4'],
|
|
858
1102
|
body: ODE_BODY,
|
|
859
1103
|
},
|
|
860
1104
|
{
|
|
@@ -881,12 +1125,13 @@ export const HELP_TOPICS = [
|
|
|
881
1125
|
},
|
|
882
1126
|
{
|
|
883
1127
|
key: 'derivation',
|
|
884
|
-
|
|
1128
|
+
/** 同上,从 extra 提到 core:参数扫描与结论翻转是建模的一部分。 */
|
|
1129
|
+
tier: 'core',
|
|
885
1130
|
/** 信号量 21。 */
|
|
886
1131
|
weight: 21,
|
|
887
1132
|
short: '推演栈 29 子命令',
|
|
888
1133
|
title: '推演栈(derivation 子命令)',
|
|
889
|
-
summary: '
|
|
1134
|
+
summary: '敏感度/结论翻转/逆推校准/相图/算力预算等 29 子命令。★ 全部子命令在这。',
|
|
890
1135
|
aliases: ['推演', 'derivation', '混沌', '白皮书', '相图', '敏感度', '算力'],
|
|
891
1136
|
body: DERIVATION_BODY,
|
|
892
1137
|
},
|
|
@@ -903,14 +1148,54 @@ export const HELP_TOPICS = [
|
|
|
903
1148
|
},
|
|
904
1149
|
{
|
|
905
1150
|
key: 'recipe',
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
weight:
|
|
909
|
-
short: '
|
|
910
|
-
title: '
|
|
911
|
-
summary: '
|
|
912
|
-
aliases: ['锚点', 'sanity', '账本', '闭合', '多步', '
|
|
913
|
-
body:
|
|
1151
|
+
/** 通用手法:锚点/账本/多步链。几乎每次做多步推演都要看。 */
|
|
1152
|
+
tier: 'core',
|
|
1153
|
+
weight: 20,
|
|
1154
|
+
short: '锚点账本多步',
|
|
1155
|
+
title: '通用手法(锚点 sanity / 账本闭合 / 多步链)',
|
|
1156
|
+
summary: '怎么给数字加你自己的判据(sanity)、怎么核对账本闭合、怎么串多步链。★ 通用,不依赖领域。',
|
|
1157
|
+
aliases: ['锚点', 'sanity', '账本', '闭合', '多步', '配方', 'recipe'],
|
|
1158
|
+
body: RECIPE_COMMON_BODY,
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
key: 'recipe-errors',
|
|
1162
|
+
tier: 'core',
|
|
1163
|
+
weight: 12,
|
|
1164
|
+
short: '错误码对照',
|
|
1165
|
+
title: '错误码对照(ok=false 时看这节)',
|
|
1166
|
+
summary: 'non_finite / unit_mismatch / unknown_symbol / not_a_quantity 等错误类型的含义与修法。',
|
|
1167
|
+
aliases: ['错误', '报错', 'error', '失败', 'error type'],
|
|
1168
|
+
body: RECIPE_ERROR_BODY,
|
|
1169
|
+
},
|
|
1170
|
+
{
|
|
1171
|
+
key: 'recipe-fiscal',
|
|
1172
|
+
tier: 'core',
|
|
1173
|
+
weight: 14,
|
|
1174
|
+
short: '文明崩溃链',
|
|
1175
|
+
title: '推演配方·文明崩溃(财政六步链)',
|
|
1176
|
+
summary: '征管弱 → 赤字 → 基本余额为负 → i>g 螺旋 → 铸币 → 改革无空间。★ 每步可核对。',
|
|
1177
|
+
aliases: ['文明崩溃', '帝国崩溃', '财政链', '死亡螺旋', '破产推演'],
|
|
1178
|
+
body: RECIPE_FISCAL_BODY,
|
|
1179
|
+
},
|
|
1180
|
+
{
|
|
1181
|
+
key: 'recipe-bio',
|
|
1182
|
+
tier: 'core',
|
|
1183
|
+
weight: 12,
|
|
1184
|
+
short: '巨兽可行性',
|
|
1185
|
+
title: '推演配方·巨兽可行性(生物六步链)',
|
|
1186
|
+
summary: '表面积比 → Fick 通量 → 扩散时间 → Péclet → 饱和 → 生长上限。★ 回答「这么大的生物能不能活」。',
|
|
1187
|
+
aliases: ['巨兽', '巨型生物', '可行性', '能不能活', '生物链'],
|
|
1188
|
+
body: RECIPE_BIO_BODY,
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
key: 'recipe-material',
|
|
1192
|
+
tier: 'core',
|
|
1193
|
+
weight: 14,
|
|
1194
|
+
short: '材料三层链',
|
|
1195
|
+
title: '推演配方·材料(微观决定 → 本构 → 构件失效)',
|
|
1196
|
+
summary: '从键强度推熔点/模量/强度,再到胡克/断裂韧性/许用应力,最后接梁柱尺寸。★ 两档起步。',
|
|
1197
|
+
aliases: ['材料推演', '材料链', '本构', '键强度', '熔模强'],
|
|
1198
|
+
body: RECIPE_MATERIAL_BODY,
|
|
914
1199
|
},
|
|
915
1200
|
];
|
|
916
1201
|
/**
|
|
@@ -984,22 +1269,100 @@ function renderIndex() {
|
|
|
984
1269
|
const byWeight = (a, b) => (b.weight ?? 0) - (a.weight ?? 0);
|
|
985
1270
|
const core = HELP_TOPICS.filter((item) => item.tier === 'core').sort(byWeight);
|
|
986
1271
|
const extra = HELP_TOPICS.filter((item) => item.tier === 'extra').sort(byWeight);
|
|
1272
|
+
/**
|
|
1273
|
+
* ## 目录分三段:算术 / 建模与推演 / 其余
|
|
1274
|
+
*
|
|
1275
|
+
* 实测反馈(能力评估文档第 4 节)是本轮最重的一条:
|
|
1276
|
+
*
|
|
1277
|
+
* > 「一个能做动力学 + 参数扫描 + 499 条领域公式的工具,被排在了『低频』栏里。」
|
|
1278
|
+
* > 「我写了 300 行 Python 做逐年迭代、参数扫描、双状态耦合 ——
|
|
1279
|
+
* > 而 ode、sensitivity、formula 就在那里,只是排在了『低频』栏的最后一行。」
|
|
1280
|
+
*
|
|
1281
|
+
* 原始证据也很硬:该会话调用 math_execute 18 次、手写 Python 6 个脚本约 300 行,
|
|
1282
|
+
* 而脚本做的事(逐年迭代、参数扫描、状态耦合)工具全都有对应的 operation。
|
|
1283
|
+
*
|
|
1284
|
+
* ## 所以改动只有一处,但很关键
|
|
1285
|
+
*
|
|
1286
|
+
* 不是「再加一句说明」,而是**把建模类从『低频』栏里提出来单独成段**。
|
|
1287
|
+
* 因为「低频」这个词本身就在劝退 —— 它表达的是「用得少」,
|
|
1288
|
+
* 而 `ode` 用得少不代表不该在写增长模型时想起它。
|
|
1289
|
+
*
|
|
1290
|
+
* 并且在这一段的开头直接给一句**触发词**:「正在手写循环/逐年表/参数扫描?先看这几节」。
|
|
1291
|
+
* 文档的建议原话也是这句:「能力不缺,缺的是一句『你正在手写循环?先看这里』」。
|
|
1292
|
+
*/
|
|
1293
|
+
/**
|
|
1294
|
+
* 建模段包含:动力学、公式库、参数扫描、配方、世界观,以及**九个领域公式节**。
|
|
1295
|
+
*
|
|
1296
|
+
* 领域节原本压成一节 `domains`(8707 字符),现在拆开 ——
|
|
1297
|
+
* 查询「财政赤字」不必再读梁柱挠度与 Péclet 数。
|
|
1298
|
+
* 拆开后它们仍然属于「建模」,因为它们都是公式(而不是算术)。
|
|
1299
|
+
*/
|
|
1300
|
+
const MODELING_KEYS = ['ode', 'formula', 'derivation', 'recipe', 'recipe-errors', 'recipe-fiscal', 'recipe-bio', 'recipe-material', 'world',
|
|
1301
|
+
'd-struct', 'd-thermal', 'd-fluid', 'd-ecology', 'd-macro', 'd-material', 'd-bio', 'd-fiscal', 'd-gdp'];
|
|
1302
|
+
const isModeling = (topic) => MODELING_KEYS.includes(topic.key);
|
|
1303
|
+
const arithmetic = core.filter((topic) => !isModeling(topic));
|
|
1304
|
+
const modeling = core.filter(isModeling);
|
|
987
1305
|
const lines = [
|
|
988
1306
|
'══════ math_execute 能力目录(' + HELP_TOPICS.length + ' 节)══════',
|
|
989
1307
|
'helpTopic:"键名" 取该节全文;也可用中文词(矩阵/星球/单位…)。',
|
|
990
1308
|
'',
|
|
1309
|
+
' ── 一、算术 ──',
|
|
991
1310
|
];
|
|
992
|
-
for (const topic of
|
|
1311
|
+
for (const topic of arithmetic) {
|
|
1312
|
+
lines.push(' ' + topic.key.padEnd(10) + topic.title);
|
|
1313
|
+
lines.push(' ' + topic.summary);
|
|
1314
|
+
}
|
|
1315
|
+
lines.push('');
|
|
1316
|
+
lines.push(' ── 二、建模与推演 ──');
|
|
1317
|
+
lines.push(' ★ 正在手写循环 / 逐年表 / 参数扫描?先看这几节,别用脚本重写');
|
|
1318
|
+
/**
|
|
1319
|
+
* ## 领域公式节在目录里只给一行
|
|
1320
|
+
*
|
|
1321
|
+
* 这九节是原 `domains` 拆出来的。**如果每节都给标题 + 两句简介**,
|
|
1322
|
+
* 目录会从 1083 涨到 1821 字符 —— 那等于把「按需付费」又搬回「每次多付」。
|
|
1323
|
+
*
|
|
1324
|
+
* 所以它们按「一行 key + 六字标签」呈现(与 extra 折叠节同一形态):
|
|
1325
|
+
* key 与标签足够让人知道**有这一节、叫什么**,详细内容查时再付。
|
|
1326
|
+
*
|
|
1327
|
+
* 这与本轮的目标一致:**扩容发生在按需层,固定层(目录)尽量不动**。
|
|
1328
|
+
*/
|
|
1329
|
+
/**
|
|
1330
|
+
* 紧凑组:领域公式节与推演配方节都只给「key=六字标签」。
|
|
1331
|
+
*
|
|
1332
|
+
* 它们的共同点是**场景特定** —— 查「财政赤字」的人不需要先读材料链条,
|
|
1333
|
+
* 反之亦然。所以详细内容只在被查询时才付费。
|
|
1334
|
+
*/
|
|
1335
|
+
const isCompact = (topic) => topic.key.startsWith('d-') || topic.key.startsWith('recipe-');
|
|
1336
|
+
const modelingCore = modeling.filter((topic) => !isCompact(topic));
|
|
1337
|
+
const compactSections = modeling.filter(isCompact);
|
|
1338
|
+
for (const topic of modelingCore) {
|
|
993
1339
|
lines.push(' ' + topic.key.padEnd(10) + topic.title);
|
|
994
1340
|
lines.push(' ' + topic.summary);
|
|
995
1341
|
}
|
|
1342
|
+
if (compactSections.length > 0) {
|
|
1343
|
+
const domainSections = compactSections.filter((topic) => topic.key.startsWith('d-'));
|
|
1344
|
+
const recipeSections = compactSections.filter((topic) => topic.key.startsWith('recipe-'));
|
|
1345
|
+
const pushCompact = function (label, topics) {
|
|
1346
|
+
lines.push(' ' + label);
|
|
1347
|
+
const labels = topics.map(function (topic) {
|
|
1348
|
+
return topic.key + '=' + (topic.short ?? topic.title.slice(0, 8));
|
|
1349
|
+
});
|
|
1350
|
+
for (let index = 0; index < labels.length; index += 3) {
|
|
1351
|
+
lines.push(' ' + labels.slice(index, index + 3).join(' · '));
|
|
1352
|
+
}
|
|
1353
|
+
};
|
|
1354
|
+
if (domainSections.length > 0)
|
|
1355
|
+
pushCompact('领域公式(各 600~1600 字符,按需查):', domainSections);
|
|
1356
|
+
if (recipeSections.length > 0)
|
|
1357
|
+
pushCompact('推演配方(场景特定,按需查):', recipeSections);
|
|
1358
|
+
}
|
|
996
1359
|
/**
|
|
997
1360
|
* 低频节压成一行:`key` 后面跟六字标签。
|
|
998
1361
|
* 用 ` / ` 分隔而不是每个占一行,是因为 8 行 = 8 次换行成本,
|
|
999
1362
|
* 而它们本来只是「顺带知道一下」的存在。
|
|
1000
1363
|
*/
|
|
1001
1364
|
lines.push('');
|
|
1002
|
-
lines.push('
|
|
1365
|
+
lines.push(' ── 三、其余能力(同样可查,正文里有完整说明)──');
|
|
1003
1366
|
const folded = extra.map(function (item) {
|
|
1004
1367
|
const label = item.short ?? item.title.slice(0, 8);
|
|
1005
1368
|
return item.key + '=' + label;
|