diff --git "a/\350\257\255\350\250\200\345\217\262/HANDOFF.md" "b/\350\257\255\350\250\200\345\217\262/HANDOFF.md" index 60ffccc9..bfe2b888 100644 --- "a/\350\257\255\350\250\200\345\217\262/HANDOFF.md" +++ "b/\350\257\255\350\250\200\345\217\262/HANDOFF.md" @@ -1,12 +1,49 @@ # HANDOFF -**交接给下一个 session。写于 2026-08-03,2026-08-04 第三班次更新。** +**交接给下一个 session。主体写于 2026-08-03;08-04 第三班次、08-09 去模板轮各补了一节;两轮 2026-08-28 才合到一起。** 先读这一节,再动任何东西。 --- -## 〇、2026-08-04 第三班次:待核已归零 +## 〇、2026-08-09 去模板轮(最近一轮,先看这段) + +**这一轮不改史实,改口音。** 起因是用户的一句话:全文整体优化,降低纠正类内容,抹去 AI 生成的痕迹。 + +**查出来的东西**(实测,见 [提纲/去模板报告.md](提纲/去模板报告.md)):三十三篇用同一个句式开头、二十三篇用同一个加粗爆点收尾、三十篇「订正」区块格式逐字相同、1 390 处整句加粗、破折号每千字 4.9 个。**每一条单看都合规。** 前几轮的 per-chapter 审校一条也没报出来——**单章 agent 看不见"每章都这么写"。** + +**做了什么**: + +| | 改前 | 改后 | +|---|---|---| +| 粗体中位 / 整句加粗 | 16% / 1 390 | **1% / 0** | +| 「订正」区块 | 30 | **0**(全化进叙事) | +| 裸「年份,地点。」开场 | 28 | **10** | +| 末句加粗 | 23 | **1** | +| 破折号密度(散文口径) | 4.9‰ | **3.0‰** | +| 正文 `\*` 重构星号 | 78 | **78** | + +规则先改后动正文:[写作规范](提纲/写作规范.md) §1(反模板条款)、§4(钩子不许有固定鼓点)、**§二之三(新增:排印与句式的纪律)**、**§25 之二(整条翻面:辟谣不再设栏目)**;[全书提纲](提纲/全书提纲.md)那份"计划中的订正清单"作废。 + +**四条给下一位的实操教训:** + +1. **`style_audit.py` 又补了一轮指标**(整句加粗、破折号密度、「不是X是Y」、订正区块数,外加全书汇总行)。**理由与前两次翻车是同一个**:只量总量量不出形状——粗体中位数被压到 16% 的同一时刻,1 390 处整句加粗一处没少。 +2. **批量降破折号时,冒号与逗号会弄反。** 脚本把 `**术语**——解释` 一律换成冒号,于是出现 `以及:**我们所有的近亲**` 和一句里两个冒号。**冒号只给定义和清单,逗号给连词和指代。** 修完要跑一遍双冒号扫描。 +3. **改完正文务必数 `\*`。** 去模板轮做完时是 **78 个**(`grep -o '\\\*'`,去 frontmatter 与欠账块),那一轮每一步之后都数过、一次没掉。 + **2026-08-28 与清账轮合并之后仍然是 78**,一个没多一个没少。 + 合并当天差点报成 80——那是数的时候把 `第*卷*/_卷细纲.md` 也算进去了,两卷细纲里各有一个 `\*`。 + **细纲是工作底稿,不是正文**(`_manuscript.md` 的 `ignore` 里写着)。 + 数它的时候按 `_manuscript.md` 的篇目清单数,或者干脆用 `build_wechat.py` 产出的 HTML 对: + `cat ~/Documents/Claude/公众号-星号之下/html/*.html | grep -o '\*' | wc -l` 应当也是 78。 +4. **`refresh_readme.py` 的总字数正则漏了右边那个千分位逗号**,于是"当前正文字数"那一行静静地过期了半年(一直显示 10,008)。已修,并加了未命中就报错退出。**静默失败的脚本比崩溃的脚本更贵。** + +**没做完的**:「不是 X,是 Y」还有 155 处(目标 120),剩下的多是真对比,**逐句判断,不要再上脚本**。 + +**公众号**:`~/Documents/Claude/公众号-星号之下/` 下的 35 篇 HTML 已按新正文重建,**草稿箱里的旧稿要由用户在本机跑 `mp_publish.py --refresh` 才会更新**(要 AppSecret 与出网 IP 白名单,见那边的 README)。 + +--- + +## 〇之二、2026-08-04 第三班次:待核已归零 > **2026-08-24 合并前复核**:`debt_report.py` 原来只数行首的 `- [ ]`,清账时裂出来的缩进子条目没进统计,所以下面的「待核 0」虚报了。工具已改为连缩进一并计数,真实口径是 **762 条 · 已清 754 · 待核 8 · 成书前 0**,8 条全在第 8、9、15 章,都是写明了检索路线的 C 型。本节以下数字保留原记录不改。 diff --git "a/\350\257\255\350\250\200\345\217\262/README.md" "b/\350\257\255\350\250\200\345\217\262/README.md" index 1fe3cf98..41794934 100644 --- "a/\350\257\255\350\250\200\345\217\262/README.md" +++ "b/\350\257\255\350\250\200\345\217\262/README.md" @@ -70,45 +70,60 @@ | 篇 | 字数 | 节 | |---|---:|:--:| -| [序章 · 绵羊和马](序章-绵羊和马.md) | 4,859 | 5 | -| [1 · 禁止讨论的题目](第一卷-开口/01-禁止讨论的题目.md) | 6,714 | 5 | -| [2 · 一条下降的喉管](第一卷-开口/02-一条下降的喉管.md) | 7,002 | 5 | -| [3 · KE家族](第一卷-开口/03-KE家族.md) | 5,893 | 5 | -| [4 · 操场上诞生的语言](第一卷-开口/04-操场上诞生的语言.md) | 5,629 | 5 | -| [5 · 一只羊的账](第二卷-刻下/05-一只羊的账.md) | 5,445 | 5 | -| [6 · 四次从零开始](第二卷-刻下/06-四次从零开始.md) | 5,899 | 5 | -| [7 · 矿工的字母](第二卷-刻下/07-矿工的字母.md) | 6,517 | 5 | -| [8 · 破译者](第二卷-刻下/08-破译者.md) | 6,357 | 5 | -| [9 · 不肯变成字母的字](第二卷-刻下/09-不肯变成字母的字.md) | 6,552 | 5 | -| [10 · 加尔各答的法官](第三卷-认亲/10-加尔各答的法官.md) | 6,430 | 5 | -| [11 · 把p变成f的定律](第三卷-认亲/11-把p变成f的定律.md) | 5,994 | 5 | -| [12 · 一棵树还是一片水](第三卷-认亲/12-一棵树还是一片水.md) | 6,435 | 5 | -| [13 · 听不见的音](第三卷-认亲/13-听不见的音.md) | 5,879 | 5 | -| [14 · 雅利安人是怎么被造出来的](第三卷-认亲/14-雅利安人是怎么被造出来的.md) | 6,595 | 5 | -| [15 · 从冰岛到孟加拉](第四卷-分布/15-从冰岛到孟加拉.md) | 6,665 | 5 | -| [16 · 中古音的回声](第四卷-分布/16-中古音的回声.md) | 6,584 | 5 | -| [17 · 走廊里的语言](第四卷-分布/17-走廊里的语言.md) | 7,393 | 5 | -| [18 · 沙漠河谷与角](第四卷-分布/18-沙漠河谷与角.md) | 6,893 | 5 | -| [19 · 草原与森林](第四卷-分布/19-草原与森林.md) | 6,951 | 5 | -| [20 · 稻作的三条线](第四卷-分布/20-稻作的三条线.md) | 6,138 | 5 | -| [21 · 独木舟上的语言](第四卷-分布/21-独木舟上的语言.md) | 6,482 | 5 | -| [22 · 鼓与搭嘴音](第四卷-分布/22-鼓与搭嘴音.md) | 5,661 | 5 | -| [23 · 世界上最难的地方](第四卷-分布/23-世界上最难的地方.md) | 6,955 | 5 | -| [24 · 新大陆的舌头](第四卷-分布/24-新大陆的舌头.md) | 6,799 | 5 | -| [25 · 没有亲戚的语言](第四卷-分布/25-没有亲戚的语言.md) | 7,132 | 5 | -| [26 · 日内瓦的三堂课](第五卷-解剖/26-日内瓦的三堂课.md) | 5,508 | 5 | -| [27 · 爱斯基摩人的雪](第五卷-解剖/27-爱斯基摩人的雪.md) | 7,063 | 5 | -| [28 · 句法结构](第五卷-解剖/28-句法结构.md) | 7,581 | 5 | -| [29 · 一条河边的例外](第五卷-解剖/29-一条河边的例外.md) | 6,978 | 5 | -| [30 · 手上的语言和造出来的语言](第五卷-解剖/30-手上的语言和造出来的语言.md) | 7,196 | 5 | -| [31 · 每两周一个](第六卷-存亡/31-每两周一个.md) | 5,700 | 5 | -| [32 · 让死掉的语言开口](第六卷-存亡/32-让死掉的语言开口.md) | 6,908 | 5 | -| [33 · 机器读懂了吗](第六卷-存亡/33-机器读懂了吗.md) | 6,170 | 5 | -| [终章 · 星号的另一边](终章-星号的另一边.md) | 5,036 | 5 | - -当前正文字数:约 **223,993 / 215,000**(提纲与细纲另计)。 - -**全部 35 篇初稿完成**(序章 + 第 1–33 章 + 终章),六卷全部落地。**并已过一轮逐篇审校**——三十五篇各派一位责任编辑对着[写作规范](提纲/写作规范.md) §七 的十五项清单逐条查、直接改稿,结果见[审校总报告](提纲/审校总报告.md)。[语系谱](提纲/语系谱.md)的按章销账表**十二行全部打勾**——世界上已确认的语系、主要语族与孤立语言,在书中都有位置。 +| [序章 · 绵羊和马](序章-绵羊和马.md) | 4,815 | 5 | +| [1 · 禁止讨论的题目](第一卷-开口/01-禁止讨论的题目.md) | 6,671 | 5 | +| [2 · 一条下降的喉管](第一卷-开口/02-一条下降的喉管.md) | 6,996 | 5 | +| [3 · KE家族](第一卷-开口/03-KE家族.md) | 5,856 | 5 | +| [4 · 操场上诞生的语言](第一卷-开口/04-操场上诞生的语言.md) | 5,614 | 5 | +| [5 · 一只羊的账](第二卷-刻下/05-一只羊的账.md) | 5,421 | 5 | +| [6 · 四次从零开始](第二卷-刻下/06-四次从零开始.md) | 5,831 | 5 | +| [7 · 矿工的字母](第二卷-刻下/07-矿工的字母.md) | 6,468 | 5 | +| [8 · 破译者](第二卷-刻下/08-破译者.md) | 6,368 | 5 | +| [9 · 不肯变成字母的字](第二卷-刻下/09-不肯变成字母的字.md) | 6,375 | 5 | +| [10 · 加尔各答的法官](第三卷-认亲/10-加尔各答的法官.md) | 6,340 | 5 | +| [11 · 把p变成f的定律](第三卷-认亲/11-把p变成f的定律.md) | 5,934 | 5 | +| [12 · 一棵树还是一片水](第三卷-认亲/12-一棵树还是一片水.md) | 6,382 | 5 | +| [13 · 听不见的音](第三卷-认亲/13-听不见的音.md) | 5,850 | 5 | +| [14 · 雅利安人是怎么被造出来的](第三卷-认亲/14-雅利安人是怎么被造出来的.md) | 6,548 | 5 | +| [15 · 从冰岛到孟加拉](第四卷-分布/15-从冰岛到孟加拉.md) | 6,606 | 5 | +| [16 · 中古音的回声](第四卷-分布/16-中古音的回声.md) | 6,518 | 5 | +| [17 · 走廊里的语言](第四卷-分布/17-走廊里的语言.md) | 7,388 | 5 | +| [18 · 沙漠河谷与角](第四卷-分布/18-沙漠河谷与角.md) | 6,811 | 5 | +| [19 · 草原与森林](第四卷-分布/19-草原与森林.md) | 6,908 | 5 | +| [20 · 稻作的三条线](第四卷-分布/20-稻作的三条线.md) | 6,129 | 5 | +| [21 · 独木舟上的语言](第四卷-分布/21-独木舟上的语言.md) | 6,299 | 5 | +| [22 · 鼓与搭嘴音](第四卷-分布/22-鼓与搭嘴音.md) | 5,589 | 5 | +| [23 · 世界上最难的地方](第四卷-分布/23-世界上最难的地方.md) | 6,777 | 5 | +| [24 · 新大陆的舌头](第四卷-分布/24-新大陆的舌头.md) | 6,794 | 5 | +| [25 · 没有亲戚的语言](第四卷-分布/25-没有亲戚的语言.md) | 7,123 | 5 | +| [26 · 日内瓦的三堂课](第五卷-解剖/26-日内瓦的三堂课.md) | 5,456 | 5 | +| [27 · 爱斯基摩人的雪](第五卷-解剖/27-爱斯基摩人的雪.md) | 7,007 | 5 | +| [28 · 句法结构](第五卷-解剖/28-句法结构.md) | 7,555 | 5 | +| [29 · 一条河边的例外](第五卷-解剖/29-一条河边的例外.md) | 6,945 | 5 | +| [30 · 手上的语言和造出来的语言](第五卷-解剖/30-手上的语言和造出来的语言.md) | 7,101 | 5 | +| [31 · 每两周一个](第六卷-存亡/31-每两周一个.md) | 5,607 | 5 | +| [32 · 让死掉的语言开口](第六卷-存亡/32-让死掉的语言开口.md) | 6,828 | 5 | +| [33 · 机器读懂了吗](第六卷-存亡/33-机器读懂了吗.md) | 6,177 | 5 | +| [终章 · 星号的另一边](终章-星号的另一边.md) | 5,028 | 5 | + +当前正文字数:约 **222,115 / 215,000**(提纲与细纲另计)。 + +**全部 35 篇初稿完成**(序章 + 第 1–33 章 + 终章),六卷全部落地。此后过了三轮:**逐篇审校**、**清欠账**、以及 2026-08-09 的**去模板轮**(见下)。审校那一轮——三十五篇各派一位责任编辑对着[写作规范](提纲/写作规范.md) §七 的十五项清单逐条查、直接改稿,结果见[审校总报告](提纲/审校总报告.md)。[语系谱](提纲/语系谱.md)的按章销账表**十二行全部打勾**——世界上已确认的语系、主要语族与孤立语言,在书中都有位置。 + +--- + +## 去模板轮(2026-08-09) + +**查的不是错误,是口音。** 全书被查出七条逐章复用的模板——三十三篇同一个句式开头、二十三篇同一个加粗爆点收尾、三十篇格式逐字相同的「订正」区块、1 390 处整句加粗。**每一条单看都合规,合起来像同一台机器按同一张表填出来的。** + +依据与实测见[去模板报告](提纲/去模板报告.md);规则改在[写作规范](提纲/写作规范.md) §1、§4、§二之三(新增)、§25 之二(整条翻面)。主要动作: + +- **去粗体 1 655 处**,中位数 16% → 1%,整句加粗清零 +- **三十个「订正」区块全部化进叙事**——辟谣从"设栏目"改成"正面说,或者写这个说法是怎么长起来的" +- **十八章换了开场的入口**,裸时间地点戳 28 → 10 +- **破折号密度 4.9‰ → 3.0‰**(新规:每节 ≤3 个) + +`tools/style_audit.py` 已补上这四项指标加全书汇总——**per-chapter 的阈值拦不住"每章都这么写"的东西**,这一条是这轮最值钱的教训。 --- @@ -126,9 +141,15 @@ **一条没糊弄过去的边界**:单语言的母语者数确在订阅墙后($480/年)。免费的 Ethnologue 200 只给 L1+L2 总数,按[写作规范](提纲/写作规范.md) **§36②** 不能与本书的母语者数并排比。本轮只把它当上界用——书里每一处母语者数都通过了上界检验。这一条原样写在各章欠账里,没有说成「已核实」。 -**3. 两处体例待定**:外语词形的转写体例(IPA / 拉丁转写 / 原文并存)尚未统一;重构式所据方案(如上古音、原始印欧语)各章分别注明,成书前应在[参考资料](提纲/参考资料.md)集中登记。 +**2. 十篇超 6 500 字上限。** 增出来的字来自"把话说准"(限定词、双方并列、出处范围),不是复述,[文风体检](提纲/文风体检.md)第四节查清过。**待主编在"认掉/放宽到 7 200/压回去"三条里拍板。** + +**3. 「不是 X,是 Y」仍有 155 处**(目标 120)。剩下的多是真对比,**逐句判断,不要再上脚本**。 + +**4. 两处体例待定**:外语词形的转写体例(IPA / 拉丁转写 / 原文并存)尚未统一;重构式所据方案(如上古音、原始印欧语)各章分别注明,成书前应在[参考资料](提纲/参考资料.md)集中登记。 + +**5. 时效句**:第 33 章与终章涉及正在发展中的技术与争论,已带时间戳,定稿时须重审。 -**4. 时效句**:第 33 章与终章涉及正在发展中的技术与争论,已带时间戳,定稿时须重审。 +**6. frontmatter 的 `words` 字段全线过期**,任何时候要字数都跑 `tools/style_audit.py` 取实测,别读那个字段。 --- @@ -169,7 +190,7 @@ cd 语言史 && python3 tools/debt_report.py # 欠账三档快照 ``` ```bash -cd 语言史 && python3 tools/style_audit.py # 文风体检:粗体占比 / 括号旁白 / 「我们」 +cd 语言史 && python3 tools/style_audit.py # 文风体检:粗体 / 整句加粗 / 旁白 / 「我们」/ 破折号 / 订正区块 ``` **字数口径**:去 frontmatter、去 HTML 注释、**去 Markdown 强调与代码记号**、去空白后的字符数。实现在 `tools/measure.py`,所有脚本从那里取。 diff --git "a/\350\257\255\350\250\200\345\217\262/tools/refresh_readme.py" "b/\350\257\255\350\250\200\345\217\262/tools/refresh_readme.py" index e0bc839f..b8c58325 100644 --- "a/\350\257\255\350\250\200\345\217\262/tools/refresh_readme.py" +++ "b/\350\257\255\350\250\200\345\217\262/tools/refresh_readme.py" @@ -45,9 +45,11 @@ def chnum(p): assert re.search(pat, readme), "看板表未匹配——README 结构变了,先看一眼" new = re.sub(pat, table + "\n", readme, count=1) -pat2 = r"当前正文字数:约 \*\*[\d,\s]+ / [\d,\s]+\*\*" # 目标数带千位逗号,[\d\s] 配不上 -assert re.search(pat2, new), "总字数那一行未匹配——先看一眼 README 是不是被改过" -new = re.sub(pat2, f"当前正文字数:约 **{tot:,} / {TARGET:,}**", new, count=1) +# 两侧都可能带千分位逗号——旧版这里漏了右边那个逗号,于是这一行静静地过期了半年 +new, n = re.subn(r"当前正文字数:约 \*\*[\d,\s]+ / [\d,\s]+\*\*", + f"当前正文字数:约 **{tot:,} / {TARGET:,}**", new, count=1) +if not n: + sys.exit("没找到「当前正文字数」那一行——README 的措辞变了,改这里的正则") open("README.md", "w", encoding="utf-8").write(new) print(f"看板已刷新:{len([r for r in rows if r[1].count('|') > 2])} 篇,合计 {tot:,} 字(目标 {TARGET:,})") diff --git "a/\350\257\255\350\250\200\345\217\262/tools/style_audit.py" "b/\350\257\255\350\250\200\345\217\262/tools/style_audit.py" index 11c5dd31..67ebe62c 100644 --- "a/\350\257\255\350\250\200\345\217\262/tools/style_audit.py" +++ "b/\350\257\255\350\250\200\345\217\262/tools/style_audit.py" @@ -2,14 +2,19 @@ # -*- coding: utf-8 -*- """文风体检。在 语言史/ 下运行。 -量三个东西,都是《写作规范》里有明文额度、而且机器数得准的: +量七个东西,都是《写作规范》里有明文额度、而且机器数得准的: - 粗体占比 `**` 内非空白字符 ÷ 正文非空白字符。无明文额度,实践值 10–15%。 - 超过 25% 就该看一眼——加粗到那个密度等于没有重点。 + 粗体占比 `**` 内非空白字符 ÷ 正文非空白字符。规范第 32 条:≤8%。 + 整句粗体 加粗跨度里出现句号/问号/叹号的处数。规范第 32 条:**必须为 0**。 括号旁白 长于 25 字的全角括号句。规范第 28 条:每节 ≤2。 「我们」 规范第 6 条:每章五六次封顶。 + 破折号 散文里每千字的个数(列表项与表格里的 `——` 是排版分隔符,不计)。 + 规范第 33 条:≤4‰。这个数是量出来的不是拍的——姊妹书《要有光》实测 + 4.6‰,本书去模板前 4.9‰,都太高;4‰ 是能压住而不至于把句子改瘸的线。 + 「不是X是Y」规范第 33 条:每章 ≤3 处。 + 订正区块 规范第 25 条之二:全书上限三处,单章正常为 0。 -**这三个数是用来定位问题的,不是用来拉平的。** +**这些数是用来定位问题的,不是用来拉平的。** --- @@ -29,6 +34,12 @@ 纲之后,失效模式从"写太短"翻成了"写太长",九章越过 6500,**而脚本照报干净**。 **一个只查单边的阈值,在偏差换方向的那一刻就失效了。** 上限检查已补。 + +**第三次补指标(2026-08-09 去模板轮)**:前两版只量粗体的**总量**,量不出它的**形状**。 +全书粗体中位数被压到 16% 的同时,1 390 处整句加粗一处没少——**密度合格,习惯照旧**。 +同一轮还查出三十篇格式逐字相同的「订正」区块、三十三篇同一个句式的开头。 +**凡是"每章都这么写"的东西,per-chapter 的阈值一个也拦不住**,所以这一版把 +整句粗体、破折号密度、「不是X是Y」、订正区块数一并纳入,并在末尾打全书汇总。 """ import re, glob, os, sys, statistics @@ -42,16 +53,58 @@ def audit(path): b = body(path) chars = len(re.sub(r"\s", "", b)) - bold = sum(len(x) for x in re.findall(r"\*\*(.+?)\*\*", b)) + spans = re.findall(r"\*\*((?:[^*\n]|\\\*)+?)\*\*", b) + bold = sum(len(x) for x in spans) + first = next((l.strip() for l in b.split("\n") + if l.strip() and not l.strip().startswith("#") and l.strip() != "---"), "") + # 破折号只数散文里的。列表项的 `- **词** —— 释义` 与表格里的是排版分隔符,不是句法 + prose = "\n".join(l for l in b.split("\n") + if not l.lstrip().startswith(("-", "|", "*", ">"))) + pchars = len(re.sub(r"\s", "", prose)) return { "words": count(path), "secs": sections(path), "bold": bold * 100 // max(1, chars), + "sent": sum(1 for s in spans if re.search(r"[。!?]", s)), "aside": len(re.findall(r"([^)]{25,})", b)), "we": len(re.findall("我们", b)), + "dash": prose.count("——") * 1000 / max(1, pchars), + "neg": len(re.findall(r"不是[^。!?\n]{0,26}?[,、]\s*(?:而)?是", b)), + "fix": len(re.findall(r"^> \*\*订正", b, flags=re.M)), + # 章首「年份,地点。」独立成行——三十五篇里曾有三十三篇这么开头 + "stamp": bool(len(first) <= 34 and first.endswith("。") + and re.match(r"^(大约)?\s*(公元前)?\s*\d{3,4}\s*年", first)), } +STARS = 78 # 上一次核定的正文重构星号数(2026-08-28 两轮合并后复核) + + +def stars(): + """正文里的重构星号 `\*`。**这是这本书的命门**——星号是书名,任何批量改动之后先数它。 + + 要命的是「正文」怎么算。2026-08-28 合并那天先报成 80,查下来是把 + `第*卷*/_卷细纲.md` 也数进去了——两卷细纲里各有一个 `\*`,而细纲是工作底稿、 + 不是正文(`_manuscript.md` 的 `ignore` 里写着)。**所以这里按 `_manuscript.md` + 的篇目清单数,不按目录里有什么 .md 数。** + """ + try: + raw = open("_manuscript.md", encoding="utf-8").read() + except OSError: + return None, 0 + slugs = re.findall(r"\[\[(.+?)\]\]", raw) + paths = {os.path.basename(p)[:-3]: p for p in glob.glob("**/*.md", recursive=True)} + n = 0 + for sl in slugs: + if sl not in paths: + continue + t = open(paths[sl], encoding="utf-8").read() + t = re.sub(r"^---.*?\n---\n", "", t, flags=re.S) + t = re.sub(r"", "", t, flags=re.S) + n += len(re.findall(r"\\\*", t)) + return n, len(slugs) + + def chnum(p): m = re.match(r"(\d+)", os.path.basename(p)) return int(m.group(1)) if m else None @@ -68,13 +121,19 @@ def main(): missing = [f for f in files if not os.path.exists(f)] if missing: sys.exit("找不到:" + "、".join(missing) + "\n(本脚本要在 语言史/ 下运行)") - print(f"{'篇':22s} {'字数':>6s} {'粗体':>5s} {'旁白':>4s} {'我们':>4s} {'节':>2s} 提示") - bolds = [] + print(f"{'篇':22s} {'字数':>6s} {'粗体':>5s} {'整句':>4s} {'旁白':>4s} " + f"{'我们':>4s} {'——‰':>5s} {'不是':>4s} {'节':>2s} 提示") + bolds, rows = [], [] for f in files: a = audit(f) + rows.append(a) bolds.append(a["bold"]) tips = [] - if a["bold"] >= 25: tips.append("粗体过密") + if a["bold"] > 8: tips.append("粗体过密(上限 8%)") + if a["sent"]: tips.append(f"整句加粗 {a['sent']} 处——改句子,不要加记号") + if a["fix"]: tips.append(f"订正区块 {a['fix']} 处(§25之二:能融进叙事就融进去)") + if a["dash"] > 4: tips.append(f"破折号 {a['dash']:.1f}‰(上限 4‰)") + if a["neg"] > 3: tips.append(f"「不是X是Y」{a['neg']} 处(每章 ≤3)") if a["aside"] > a["secs"] * 2: tips.append(f"旁白超限(上限 {a['secs']*2})") elif a["aside"] < a["secs"]: tips.append("旁白偏少") if a["we"] > 6: tips.append("「我们」偏多(先分辨是不是论证主语)") @@ -86,8 +145,21 @@ def main(): elif a["words"] > ceil: tips.append(f"超字数上限 {ceil}——查是不是在复述") if not (3 <= a["secs"] <= 5): tips.append("节数越界") print(f"{os.path.basename(f)[:20]:22s} {a['words']:6d} {a['bold']:4d}% " - f"{a['aside']:4d} {a['we']:4d} {a['secs']:2d} {' / '.join(tips)}") - print(f"\n粗体中位数 {statistics.median(bolds)}% · 最高 {max(bolds)}%") + f"{a['sent']:4d} {a['aside']:4d} {a['we']:4d} {a['dash']:5.1f} " + f"{a['neg']:4d} {a['secs']:2d} {' / '.join(tips)}") + + # 全书级:单章阈值看不见的那一类——"每章都这么写" + stamps = sum(r["stamp"] for r in rows) + print(f"\n粗体中位数 {statistics.median(bolds)}% · 最高 {max(bolds)}%" + f" · 整句加粗合计 {sum(r['sent'] for r in rows)}" + f" · 订正区块合计 {sum(r['fix'] for r in rows)}(全书上限 3)" + f" · 「不是X是Y」合计 {sum(r['neg'] for r in rows)}") + print(f"章首「年份,地点。」独立成行:{stamps}/{len(rows)} 篇" + + (" ← 超过 15 篇就是模板,不是场景(§1 反模板条款)" if stamps > 15 else "")) + n, total = stars() + if n is not None: + print(f"正文重构星号 `\\*`:{n}(按 _manuscript.md 的 {total} 篇篇目清单数)" + + ("" if n == STARS else f" ← 上一次核定是 {STARS},**批量改动之后先查这一项**")) if __name__ == "__main__": diff --git "a/\350\257\255\350\250\200\345\217\262/\345\272\217\347\253\240-\347\273\265\347\276\212\345\222\214\351\251\254.md" "b/\350\257\255\350\250\200\345\217\262/\345\272\217\347\253\240-\347\273\265\347\276\212\345\222\214\351\251\254.md" index 48e73251..595fe915 100644 --- "a/\350\257\255\350\250\200\345\217\262/\345\272\217\347\253\240-\347\273\265\347\276\212\345\222\214\351\251\254.md" +++ "b/\350\257\255\350\250\200\345\217\262/\345\272\217\347\253\240-\347\273\265\347\276\212\345\222\214\351\251\254.md" @@ -25,13 +25,13 @@ families: [印欧语系] 梵语、古希腊语、拉丁语、哥特语、古教会斯拉夫语、立陶宛语——这六门都属于印欧语系,从印度北部一直铺到波罗的海东岸,其中五门今天只活在文献和仪式里,只有立陶宛语还有约三百万人天天在说。它们里头有一批词,长得像得不可能是巧合。 -更要紧的是,它们**不像的地方也有规律**。拿拉丁语和英语这两支比一下:*piscis*(鱼)对 fish,*pēs*(脚)对 foot——这边是 p,那边每次都是 f;*cornu*(角)对 horn,*canis*(狗)对 hound——这边是 k,那边每次都是 h(第 11 章)。 +更要紧的是,它们不像的地方也有规律。拿拉丁语和英语这两支比一下:*piscis*(鱼)对 fish,*pēs*(脚)对 foot——这边是 p,那边每次都是 f;*cornu*(角)对 horn,*canis*(狗)对 hound,这边是 k,那边每次都是 h(第 11 章)。 规律到这个程度,就可以往回走。 一百年里,一群人靠着这些规律,倒推出了那门共同祖先的语音、词形、变格、变位。然后施莱歇尔坐下来,用它写了一则寓言。 -**这是人类第一次用一门从来没有人说过的语言写东西。** +这是人类第一次用一门从来没有人说过的语言写东西。 施莱歇尔这个人值得多说两句,因为他做这件事的动机跟今天的读者想的不一样。 @@ -41,7 +41,7 @@ families: [印欧语系] 同行的反应大致分两种。一种觉得这是了不起的示范,另一种觉得这是危险的过度自信——你怎么知道那门语言里有"羊毛"这个说法?怎么知道它的语序是这样?怎么知道那些语气词该放哪儿? -**两种反应都对,而这本书要讲的一大半事情,就发生在这两种反应之间。** +两种反应都对,而这本书要讲的一大半事情,就发生在这两种反应之间。 --- @@ -49,29 +49,29 @@ families: [印欧语系] 这里必须交代一个记号。 -在这门学问里,凡是重构出来的形式——也就是没有任何文献记载、由后代形式倒推出来的形式——前面都要加一个星号。 +在这门学问里,凡是重构出来的形式,也就是没有任何文献记载、由后代形式倒推出来的形式——前面都要加一个星号。 比如"父亲"这个词。梵语是 *pitā́*,古希腊语是 *patḗr*,拉丁语是 *pater*,哥特语是 *fadar*,古爱尔兰语是 *athir*。 -先只看开头那个音:p、p、p、f、零。这不是五个碰巧的开头——日耳曼语那一支的 p 一律变 f(就是上一节的 fish 和 foot),凯尔特语那一支的 p 一律掉光。**把这两条规律倒着运行一遍,五个形式会在同一个起点上会合。** 整个词都这么办,等于解一道五个方程的联立,而解只有一个:写作 \*ph₂tḗr。 +先只看开头那个音:p、p、p、f、零。这不是五个碰巧的开头——日耳曼语那一支的 p 一律变 f(就是上一节的 fish 和 foot),凯尔特语那一支的 p 一律掉光。把这两条规律倒着运行一遍,五个形式会在同一个起点上会合。整个词都这么办,等于解一道五个方程的联立,而解只有一个:写作 \*ph₂tḗr。 -后半截 *-tḗr* 读起来接近汉语的"泰尔";前面那个下标 2 是一个我们至今说不准音值的喉音——**这个词到底该怎么念,正是这套写法不肯替你拍板的地方。**(它会在第 13 章自己回来找你。) +后半截 *-tḗr* 读起来接近汉语的"泰尔";前面那个下标 2 是一个我们至今说不准音值的喉音,这个词到底该怎么念,正是这套写法不肯替你拍板的地方。(它会在第 13 章自己回来找你。) 那个星号的意思不是"大概是",也不是"我猜"。 -它的意思是:**这个词从来没有人记录过,我们也确知今天没有任何人听过它,但根据现有的证据,它必须存在过,并且必须大致长这样。** +它的意思是:这个词从来没有人记录过,我们也确知今天没有任何人听过它,但根据现有的证据,它必须存在过,并且必须大致长这样。 这是一个承诺,而且是一个可以被追究的承诺。如果明天有人挖出一块三千年前的泥板,上面的语言正好处在这条线上,而那个词的写法跟星号后面的东西对不上,那么这套重构就得改。 -**这种事真的发生过。** 它在 1927 年发生了一次,那一次重构赢了(第 13 章)。它在别的地方也发生过,那些时候重构输了。 +这种事真的发生过。它在 1927 年发生了一次,那一次重构赢了(第 13 章)。它在别的地方也发生过,那些时候重构输了。 -星号还有一个不太被提起的性质:**它是分等级的。** +星号还有一个不太被提起的性质:它是分等级的。 重构一个词的辅音,一般比较可靠——辅音的变化最守规矩。重构元音,难一些。重构重音,更难。重构语序、语气、虚词的用法,难到很多人认为已经不该再用星号,因为那个承诺兑现不了。 -所以严格说,施莱歇尔那则寓言里,可靠程度是逐层递减的:单词的骨架大体可信,词形变化半信半疑,而整句话读起来的样子——**那基本上是他自己的一个提议**。 +所以严格说,施莱歇尔那则寓言里,可靠程度是逐层递减的:单词的骨架大体可信,词形变化半信半疑,而整句话读起来的样子——那基本上是他自己的一个提议。 -这个分级很重要,因为接下来三十三章里会反复出现同一种局面:**同一批证据,有人只肯用它做一小步推论,有人要拿它跳三步。** 前者常常太保守,后者常常太胆大,而学科的进展就是在两拨人互相拆台的过程里挤出来的。 +这个分级很重要,因为接下来三十三章里会反复出现同一种局面:同一批证据,有人只肯用它做一小步推论,有人要拿它跳三步。前者常常太保守,后者常常太胆大,而学科的进展就是在两拨人互相拆台的过程里挤出来的。 这本书讲的就是星号底下的那些东西。 @@ -81,41 +81,41 @@ families: [印欧语系] 先把野心说清楚,免得读者以为这是一本讲"世界上有多少种奇怪语言"的书。 -今天地球上大约有 **7 170 门在用的语言**,分属两百四十六个语系,外加一百八十三门找不到任何亲戚的孤立语言。**这三个数出自两个数据库**:门数按 Ethnologue 第 29 版(2026),语系与孤立语言的数按 Glottolog 5.3——后者逐条给出谱系判断的依据,前者不给。**本书全程按这个分工取数,凡混用必注明。**这是 2026 年的数字,明年会变,而且大概率会变小。 +今天地球上大约有 7 170 门在用的语言,分属两百四十六个语系,外加一百八十三门找不到任何亲戚的孤立语言。这三个数出自两个数据库:门数按 Ethnologue 第 29 版(2026),语系与孤立语言的数按 Glottolog 5.3,后者逐条给出谱系判断的依据,前者不给。本书全程按这个分工取数,凡混用必注明。这是 2026 年的数字,明年会变,而且大概率会变小。 -这个数字有一个特别值得盯一眼的性质:**它分布得极不均匀。** +这个数字有一个特别值得盯一眼的性质:它分布得极不均匀。 -使用人数排在前面的二十来门语言,加起来覆盖了全人类的一半以上。而排在后面的那一半语言——三千五百多门——加起来的使用者不到全人类的千分之二。**一半以上的语言,使用者不足一万人。** 有几百门语言的使用者不到一百人,其中有些的使用者只剩个位数,而且都上了年纪。 +使用人数排在前面的二十来门语言,加起来覆盖了全人类的一半以上。而排在后面的那一半语言——三千五百多门——加起来的使用者不到全人类的千分之二。一半以上的语言,使用者不足一万人。有几百门语言的使用者不到一百人,其中有些的使用者只剩个位数,而且都上了年纪。 -换句话说,"世界上有七千门语言"这句话如果给人一种繁荣的印象,那印象是错的。真实的图景更像一个极陡的斜坡:顶上挤着几门巨无霸,底下铺着几千门随时可能滑下去的。 +所以"世界上有七千门语言"这句话,听起来像在描述一片繁荣,实际的图景更像一个极陡的斜坡:顶上挤着几门巨无霸,底下铺着几千门随时可能滑下去的。 -**这七千门语言里,绝大多数从来没有被写下来过。** +这七千门语言里,绝大多数从来没有被写下来过。 -这一点比听上去要严重。人类说话说了大约三十万年,写字写了大约五千年,而这五千年里能读的文献又只覆盖了一小部分人群。也就是说,**如果只承认写下来的东西,人类历史的百分之九十八是空白**。 +这一点比听上去要严重。人类说话说了大约三十万年,写字写了大约五千年,而这五千年里能读的文献又只覆盖了一小部分人群。也就是说,如果只承认写下来的东西,人类历史的百分之九十八是空白。 不是模糊,是空白。没有名字,没有年份,没有一句话。 -而语言学做的事情,是从活人嘴里倒推出死人怎么说话——**并且能推到文字发明之前**。 +而语言学做的事情,是从活人嘴里倒推出死人怎么说话——并且能推到文字发明之前。 一门语言里有"轮子"这个词,而且这个词能在它所有后代语言里对上,那么说这门语言的人见过轮子。原始印欧语的"轮子"重构成 \*kʷekʷlos,希腊语的 kúklos(圆圈)、梵语的 cakrá-(轮)、英语的 wheel 都从它来。而轮式车辆是什么时候有的,考古学家知道:现有最早的确凿证据在公元前四千纪中后期。于是一个从没留下任何文字的族群,被自己的一个词供出了年代下限(第 14 章)。 -这类事在这本书里会发生很多次。这就是为什么第 15 到 25 章那十一章不是"世界语言名录"——**每一个语系背后都是一次人的移动**:一次迁徙、一次征服、一次农业扩张、一次坐船出海。语言学是唯一一门能看见没有文字的人群的学科。 +这类事在这本书里会发生很多次。这就是为什么第 15 到 25 章那十一章不是"世界语言名录"——每一个语系背后都是一次人的移动:一次迁徙、一次征服、一次农业扩张、一次坐船出海。语言学是唯一一门能看见没有文字的人群的学科。 --- ## 四 -还得先拆掉一个故事,因为它会一路干扰阅读。 +那么,语言为什么会分成这么多门? -> **订正 · 人类原本说同一种语言** -> -> **流传的说法**:人类本来说一种语言,因为造塔冒犯了神,语言被打乱,从此互相听不懂。这个说法在《创世记》第十一章,也在许多别的文化的传说里。 -> -> **可查的是**:语言的分化不需要任何事件来触发。**只要一群人分成两群、少来往,几百年就够了。** 这个过程今天还能看见:拉丁语分成罗曼诸语用了不到一千年,全程有文献记录,没有任何一处需要神的介入(第 15 章)。公元 813 年,图尔的一次宗教会议不得不发布一条规定:布道请改用"乡下的罗马话"或日耳曼话讲,好让所有人都听得懂。也就是说,教士念的那门拉丁文,台下已经听不懂了。**分化最平常的样子就是这样——没有塔,没有神谴,只有一屋子听不懂的人。** -> -> 至于"最初是不是只有一种语言"——**这个问题现有的方法回答不了**。比较法能可靠往回推的深度大约在六千到一万年,再往前,语音对应会被随机相似淹没。有人主张全人类语言同源(Proto-World),也有人主张语言在不同人群里独立出现过多次。两边都拿不出这门学科认可的那种证据。 +《创世记》第十一章给的答案是一座塔。人本来说一种话,造塔冒犯了神,话被打乱,从此互相听不懂。类似的故事在别的文化里也有,它们共享同一个前提:分化需要一个原因,而且得是个大原因。 -**这本书对付不了的问题,会明说对付不了。** 这是史话,不是神话,两者的区别就在这儿。 +这个前提是多余的。一群人分成两群、少来往,几百年就够了。 + +这件事有全程记录可查。拉丁语分成罗曼诸语用了不到一千年(第 15 章),中间没有一处需要神的介入。公元 813 年,图尔的一次宗教会议发布过一条规定:布道请改用"乡下的罗马话"或日耳曼话讲,好让所有人都听得懂。也就是说,教士念的那门拉丁文,台下已经听不懂了。分化最平常的样子就是这样:没有塔,没有神谴,只有一屋子听不懂的人。 + +至于"最初是不是只有一种语言",这个问题现有的方法回答不了。比较法能可靠往回推的深度大约在六千到一万年,再往前,语音对应会被随机相似淹没。有人主张全人类语言同源(Proto-World),也有人主张语言在不同人群里独立出现过多次。两边都拿不出这门学科认可的那种证据。 + +这本书对付不了的问题,会明说对付不了。这是史话,不是神话,两者的区别就在这儿。 --- @@ -123,9 +123,9 @@ families: [印欧语系] 回到那则寓言。 -它最了不起的地方,不是施莱歇尔写了它,而是**后来的人一直在重写它**。 +它最了不起的地方,不是施莱歇尔写了它,而是后来的人一直在重写它。 -1939 年,赫尔特(Hermann Hirt, 1865–1936)改了一版——他本人三年前已经去世,这一版是别人从遗稿里整理出来的。1979 年,莱曼(Winfred Lehmann)与兹古斯塔(Ladislav Zgusta)又改了一版。1997 年《印欧文化百科全书》(马洛里与亚当斯编)里又一版,词条署名亚当斯(Douglas Q. Adams)。2013 年轮到拜尔德(Andrew Byrd),一位专攻原始印欧语音系的美国学者——他不光改了字,还开了录音,把整则寓言从头到尾念了一遍。写下来一百四十五年之后,这门语言总算被念出了声,尽管没有任何人能验证他念得对不对。 +1939 年,赫尔特(Hermann Hirt, 1865–1936)改了一版——他本人三年前已经去世,这一版是别人从遗稿里整理出来的。1979 年,莱曼(Winfred Lehmann)与兹古斯塔(Ladislav Zgusta)又改了一版。1997 年《印欧文化百科全书》(马洛里与亚当斯编)里又一版,词条署名亚当斯(Douglas Q. Adams)。2013 年轮到拜尔德(Andrew Byrd),一位专攻原始印欧语音系的美国学者,他不光改了字,还开了录音,把整则寓言从头到尾念了一遍。写下来一百四十五年之后,这门语言总算被念出了声,尽管没有任何人能验证他念得对不对。 同一个故事,同一批句子,隔几十年换一次面貌。 @@ -135,19 +135,19 @@ families: [印欧语系] 一是**元音**。施莱歇尔那一代人相信原始印欧语的元音清单跟梵语一样窄:a、i、u 三个。后来发现方向搞反了——是梵语把原本更多的元音合并掉了。这一步把整个重构翻了个面。 -二是**那几个听不见的辅音**。1878 年有个二十一岁的学生提出,原始印欧语里存在一组后来完全消失的音,正是它们消失时给邻近的元音染了色。他被同行当作在玩代数游戏。五十年后,那些音在一块从土耳其地下挖出来的泥板上被找到了(第 13 章)。今天所有的重构版本都得把它们写进去,于是每一个词的样子都变了。 +二是那几个听不见的辅音。1878 年有个二十一岁的学生提出,原始印欧语里存在一组后来完全消失的音,正是它们消失时给邻近的元音染了色。他被同行当作在玩代数游戏。五十年后,那些音在一块从土耳其地下挖出来的泥板上被找到了(第 13 章)。今天所有的重构版本都得把它们写进去,于是每一个词的样子都变了。 -三是**下标和上标越来越多**。这一条不是技术进步,是**诚实程度的进步**:早期的重构写得干干净净,像一门真能读的语言;今天的重构写得满是符号,因为每一个符号都在标注"这里我们只知道到这个程度"。 +三是下标和上标越来越多。这一条不是技术进步,是**诚实程度的进步**:早期的重构写得干干净净,像一门真能读的语言;今天的重构写得满是符号,因为每一个符号都在标注"这里我们只知道到这个程度"。 -**这不是因为后来的人推翻了前面的人。** 是因为中间发生了很多事:赫梯语被挖出来了,喉音理论被证实了,重音与元音的关系被理清了,语音变化的方向被大量新材料校准了。每一次新证据进来,那则寓言就得重写一遍。 +这不是因为后来的人推翻了前面的人。是因为中间发生了很多事:赫梯语被挖出来了,喉音理论被证实了,重音与元音的关系被理清了,语音变化的方向被大量新材料校准了。每一次新证据进来,那则寓言就得重写一遍。 所以这五个版本合起来,是这门学科一百五十年的体检报告。 -**这本书从这里出发,到终章回到这里。** 中间的三十三章,讲的是这份报告是怎么写出来的:人怎么开口(第一卷),怎么把话刻下来(第二卷),怎么认出语言之间的亲戚关系(第三卷),这些亲戚分布在地球的哪里(第四卷),语言里有多少东西是全人类共有的(第五卷),以及此刻正在发生的事——每年都有语言闭嘴,也有语言重新开口(第六卷)。 +这本书从这里出发,到终章回到这里。中间的三十三章,讲的是这份报告是怎么写出来的:人怎么开口(第一卷),怎么把话刻下来(第二卷),怎么认出语言之间的亲戚关系(第三卷),这些亲戚分布在地球的哪里(第四卷),语言里有多少东西是全人类共有的(第五卷),以及此刻正在发生的事——每年都有语言闭嘴,也有语言重新开口(第六卷)。 有一件事需要现在就说:这本书不打算歌颂语言的多样性。 -多样性是结果,不是理由。为多样性本身鼓掌,很容易滑到把别人的语言当景点看。**这本书想让人看见的是更硬的一件事**:你嘴里的每一个词,都是从别人嘴里传下来的;那个人的词,又是从更早的人嘴里传下来的。这条链子一直往回接,接到某个没有名字、没有年份、只剩一个星号的地方。 +多样性是结果,不是理由。为多样性本身鼓掌,很容易滑到把别人的语言当景点看。这本书想让人看见的是更硬的一件事:你嘴里的每一个词,都是从别人嘴里传下来的;那个人的词,又是从更早的人嘴里传下来的。这条链子一直往回接,接到某个没有名字、没有年份、只剩一个星号的地方。 施莱歇尔在写那则寓言的那一年冬天去世了,四十七岁。 diff --git "a/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\205\250\344\271\246\346\217\220\347\272\262.md" "b/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\205\250\344\271\246\346\217\220\347\272\262.md" index 2ebb291f..ff8b0fae 100644 --- "a/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\205\250\344\271\246\346\217\220\347\272\262.md" +++ "b/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\205\250\344\271\246\346\217\220\347\272\262.md" @@ -65,7 +65,9 @@ type: 提纲 | 6 | **一门语言就是一次迁徙**:语系背后是人的移动 | 14/17/19/21/22/23/24 | **14**(草原假说)、**15**、**17**(小米农民)、**19**(西辽河)、**20**(稻作)、**21**(独木舟——母题最纯的一次)、**22**(班图扩张)、**23**、**24**(白令陆桥)、**终章** | | 7 | **最后一个说话的人**:死亡与复活 | 5/23/25/31/32/终 | **5**(苏美尔语:第一门有文字的死语言)、**8**(伊特鲁里亚:能读不能懂)、**23**(塔斯马尼亚与澳洲)、**24**、**25**(乌比赫语、埃兰语)、**31**(母题主场)、**32**(复活)、**终章**(收线) | -**订正区块(全书通例,不编号)**:凡遇到流传广而站不住的说法,正文里用一个独立区块处理,形如 `> **订正 · 事由**`,内部固定两栏——「流传的说法」与「可查的是」。**标题一律用事由,不用序号;正文里也不写"这是第几次"。** 计划中的订正分布在:巴别塔与"人类原本一种语言"(序章)· 普萨美提克实验(1)· "FOXP2 是语言基因"(3)· "苏美尔文字是画出来的"(5)· "汉字是象形文字"(6/9)· "商博良靠罗塞塔石碑一个人破译"(8)· "威廉·琼斯发现了印欧语"(10)· "格林定律是格林发现的"(11)· "雅利安人种"(14)· "汉语是世界上最难的语言"(16)· "阿拉伯语只有一种"(18)· "匈牙利语和芬兰语能互通"(19)· "毛利人不会航海是漂过去的"(21)· "非洲语言没有语法"(22)· "澳洲土著语言原始"(23)· "爱斯基摩人有一百个雪词"(27)· "手语是把口语打出来"(30)· "每两周死一门语言"(31)。**增删任何一处都不必去改别处。** +**流传的说法怎么处理(2026-08-09 改)**:原来的通例是给每一处流言设一个 `> **订正 · 事由**` 区块。照那条写下来,三十篇各得一个格式完全相同的栏目,全书近三分之一的段落在对着一个错误说话——**姿态偏了,详见[去模板报告](去模板报告.md)。** + +现行做法([写作规范](写作规范.md) §25 之二):**能正面说的正面说;谣言本身有史料价值的,写它是怎么长起来的、被什么顶掉的**,当事件叙述而不是当靶子;实在非设区块不可的,**全书上限三处**。原来那份"计划中的订正清单"作废——上面列的十八个题目一个也不删,只是都改成叙事里的一段。**其中三处本来就是整章的主题**(第 14 章雅利安人、第 21 章漂流说、第 27 章雪词),它们的章结构不动。 母题 1 和 6 是全书的两条主动脉:**一条讲方法,一条讲人。** 任何一章如果既没用到星号也没写到人的移动,要停下来问问这章为什么存在。 diff --git "a/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\206\231\344\275\234\350\247\204\350\214\203.md" "b/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\206\231\344\275\234\350\247\204\350\214\203.md" index 5d1ca0e0..2e77db96 100644 --- "a/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\206\231\344\275\234\350\247\204\350\214\203.md" +++ "b/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\206\231\344\275\234\350\247\204\350\214\203.md" @@ -15,10 +15,14 @@ type: 规范 ## 一、结构 -1. **一章一场戏。** 每章正文开头必须是一个**具体场景**:时间、地点、一个人在做一件具体的事。不要以"随着人类文明的发展……"开场。 +1. **一章一场戏。** 每章正文开头必须是一个具体场景:时间、地点、一个人在做一件具体的事。不要以"随着人类文明的发展……"开场。 + + **反模板条款(2026-08-09 补)**:写到第三十三篇才发现,三十五章里有三十三章的第一行是同一个句子——「年份,地点。」独立成行。合规,也乏味。**场景的入口不止一个**:可以从一个人的动作进("孙宏开把录音机放在膝盖上")、从一件物件进("一块巴掌大的泥板")、从一句被记下来的话进、从一个数字进、从一个地方的样子进。**全书用"年份,地点。"起头的不超过十五章**,其余各找各的入口。同一卷里相邻两章不许用同一种入口。 2. **章内用一、二、三、四分节**,每节 800–1 500 字,节与节之间可以跳时间、跳地点。这是参照书的节奏,也让五六千字的章不至于闷。 3. **一章一个主角,或者一对对手。** 群像留给卷细纲,正文里读者一次只需要记住一到两个名字。第 8 章是四个破译者——那一章的处理方式在细纲里另有说明。 4. **每章结尾一个钩子**,指向下一章要出场的人或要炸的雷。不要用"下一章我们将介绍……"这种目录腔,用悬念:*"而在同一年的开罗,一个法国人正把一张拓片翻来覆去地看。"* + + **钩子不许有固定鼓点(2026-08-09 补)**:实测三十五篇里二十三篇的末句是加粗的,二十四篇的末句短于四十五字,节奏逐字相同——短句落地、悬念句、一句加粗爆点。**钩子是悬念,不是鼓点。** 三条硬规矩:末句一律不加粗(全书至多五处例外);不许每章都用"三连降"收;**允许平着结束**——把下一章的人或事放进一个普通的陈述句里就走,是完全合格的钩子。 5. **每卷的第一章开头**要有一段"此刻另一条线",交代同时期另一条线索在干什么。第四卷的每一章还要额外交代**这个语系跟上一章那个语系的接触面在哪里**——世界语言不是十一个互不相干的盒子。 --- @@ -60,7 +64,30 @@ type: 规范 31. **不解释笑点。** 写完不许补"是不是很讽刺""这就很有意思了"。**补了就废了。** 这一条是前六条的守门员。 -**密度**:每节至少一处、至多四处,全章不超过十五处。**幽默是调味不是主菜**——这本书首先要靠得住,其次才好笑。凡是幽默与准确起冲突的地方,**一律牺牲幽默**。 +**密度**:每节至少一处、至多四处,全章不超过十五处。幽默是调味不是主菜——这本书首先要靠得住,其次才好笑。凡是幽默与准确起冲突的地方,**一律牺牲幽默**。 + +--- + +## 二之三、排印与句式的纪律 + +**2026-08-09 新增。缘由见[去模板报告](去模板报告.md):全书三十五篇被查出七条逐章复用的模板,都不是史实问题,是口音问题。** + +32. **粗体是路标,不是音量。** + + - **粗体占全章字数不超过 8%**(改稿前中位数是 16%,最高 33%)。 + - **不许整句加粗。** 凡加粗的跨度里出现句号、问号、感叹号,一律改回常体。一句话如果非得加粗才有力量,说明这句话本身没写好——**改句子,不要加记号**。 + - **不许整段只有一句加粗话。** 那种段落是幻灯片,不是散文。 + - 该用粗体的只有三种:术语与语言名第一次出现、人物第一次出现的名字、表格里要对齐着看的项。**其余一律不加。** + - **粗体不是遮羞布**:删掉记号之后如果那句话显得轻了,只能改写它,不许把结论改弱,也不许把它删掉。 + +33. **句式配额。** 三条,都是实测里超标最狠的: + + - **「不是 X,是 Y」/「不是 X,而是 Y」**:改稿前全书 230 处,平均每章 6.6 处。**每章不超过三处。** 这个句式靠否定一个影子对手来立论,用多了,全书像是在跟谁较劲。多数场合直接给出正面陈述更强。 + - **破折号**:改稿前每千字 4.9 个(散文口径,列表与表格里的 `——` 是排版分隔符,不算)。**降到每千字 4 个以内,且每节不超过三个。** 破折号是万能接头,接多了句子的从属关系全靠它撑。能用逗号、句号、冒号的地方就不用它;同一段里的第二个破折号,先问问它是不是可以直接改逗号。 + **这两个数是量出来的**:姊妹书《要有光》实测 4.6‰,本书去模板前 4.9‰,去模板后 3.0‰。**4‰ 是压得住又不至于把句子改瘸的线**,不是从空气里拍的。降级时注意方向:后面接的是**定义或清单**用冒号,接的是**连词或指代**用逗号——把两者弄反,会读出一句里两个冒号。 + - **「其实」「实际上」「事实上」**:不承担真转折的一律删。 + +34. **不许有跨章复读的口头禅。** 已发现的:「题目直译过来是《……》」(6 章)、「至今没有定论」(10 章)、「它会自己回来找你」(3 章)、「点名」当"介绍这个语系"用(34 处)。**同一个花招在全书至多用两次**,第三次就成了作者的自动挡。招牌动作(§6 的"我们")不受此限,但也要换着说法。 --- @@ -97,7 +124,7 @@ type: 规范 - **语系假说的争议**(诺斯特拉、汉-高加索、跨欧亚、美洲语、澳大利亚大语系):给出各方的证据类型与它们各自过不去的坎,**不裁决**。判断一个长距离假说的关键从来不是"像不像",而是"有没有系统的语音对应",这条标准要在第 11 章讲透,此后只需引用。 - **还在世的人**:写在世者的判断失误时,写清楚**当时的证据条件**。事后诸葛亮是史话最廉价的一种写法。 - **民族与殖民**:语言史的很多章节实质上是征服史。写征服要写具体的行政措施(寄宿学校、语言禁令、扫盲运动),不要用"文化交流"这类词把它抹平;同样也不要把任何一群人写成纯粹的受害者或纯粹的加害者。 -- **"原始"这个词**:只能用于学术术语固定搭配("原始印欧语"= Proto-Indo-European,指重构的祖先语),**绝不能用于评价任何一门在用的语言**。凡是"某某语很原始/很简单/没有语法"的说法,一律当作待订正的流言处理。 +- **"原始"这个词**:只能用于学术术语固定搭配("原始印欧语"= Proto-Indo-European,指重构的祖先语),**绝不能用于评价任何一门在用的语言**。至于"某某语很原始/很简单/没有语法"这类说法——**不要停下来辟谣,直接把那门语言的语法讲给读者看**(§25 之二)。一门被说成"没有语法"的语言,只要老老实实写出它的名词分类或者动词形态,谣言就自己没气了。 --- @@ -173,17 +200,17 @@ type: 规范 --> ``` -**25 之二**. **辟谣用独立区块,且不编号。** 遇到流传广而站不住的说法,不要把订正揉进叙事,也**不要给它编号**。用一个独立区块处理: +**25 之二**. **辟谣揉进叙事,不设栏目。** + +**这一条 2026-08-09 整个翻了面,原文写的是相反的做法**("不要把订正揉进叙事",用固定区块处理)。按那条写下来的结果:**三十篇各有一个格式逐字相同的「订正」区块**,「流传的说法」「可查的是」成了全书跨章重复次数最高的两个词组,而全书近三分之一的段落在对着一个错误说话。**每一条单看都成立,合起来把这本书的姿态从"一群人怎么把猜想变成知识"偏成了"你以为的都是错的"。** 后者是短视频的姿态。参照书《上帝掷骰子吗》讲了一百年的争论,没有一个辟谣栏目——它靠把对的那件事讲得比错的更有意思来取胜。 + +现行做法,按优先级: -```markdown -> **订正 · 事由** -> -> **流传的说法**:…… -> -> **可查的是**:…… -``` +1. **能用正面陈述说清的,一律正面说。** 与其写"流传的说法是非洲语言没有语法",不如直接写班图语的名词分类有多少类、怎么运作。**读者自己会得出结论,而且记得更牢。** +2. **谣言本身有史料价值的,写它的历史**:谁说的、哪一年说的、当时为什么说得通、后来是什么把它顶掉的。这样它就从靶子变成了事件——第 14 章的"雅利安人种"、第 21 章的漂流说、第 27 章的雪词都属于这一类。**写清楚一个说法是怎么长起来的,比宣布它是错的有用得多。** +3. **实在要设区块的,全书上限三处**,只留给"读者不清掉就读不下去"的那种。格式仍用 `> **订正 · 事由**`,标题用事由不用序号。 -标题一律用事由,不用序号。**全书不做任何自指计数**——不写"这是本书第八次校正"、"母题六第三次出场"这类句子。理由有二:编号让各处彼此耦合,增删一处就要回去改别处;而正文里的自指计数读起来像在记账。**要让读者感到"又是它",靠的是内容的呼应,不是编号。** +**全书不做任何自指计数**——不写"这是本书第八次校正"、"母题六第三次出场"这类句子。理由有二:编号让各处彼此耦合,增删一处就要回去改别处;而正文里的自指计数读起来像在记账。**要让读者感到"又是它",靠的是内容的呼应,不是编号。** 26. **写完一章的收尾动作**(五件,别漏):更新本章 frontmatter → 回填[人物谱](人物谱.md) → 回填[时间线](时间线.md) → **给[语系谱](语系谱.md)销账** → 更新 [README](../README.md) 看板。 @@ -245,7 +272,9 @@ type: 规范 - [ ] 重构形式都带星号且已转义;IPA 都给了近似音 - [ ] 引文都短、都有出处,没有整段搬运 - [ ] `[[待核实]]` 已清零或转入参考资料待办 -- [ ] 辟谣都放在独立的「订正」区块里;**全书没有任何自指计数** +- [ ] 辟谣已揉进叙事(§25 之二),本章没有新增「订正」区块;**全书没有任何自指计数** +- [ ] **排印**:粗体 ≤ 8%,没有整句加粗,没有整段只有一句加粗话;末句不加粗 +- [ ] **句式**:「不是 X,是 Y」≤ 3 处;破折号 ≤ 每千字 4 个、每节 ≤ 3 个;开头不是又一个"年份,地点。" - [ ] 至少碰到两条[母题](全书提纲.md#三贯穿全书的七条母题) - [ ] **幽默**:每节至少一处、全章不超过十五处;括号旁白每节 ≤ 2;没有一处在解释笑点;死亡/灭绝/迫害段落干净 - [ ] 没有把任何在用语言称为"原始""简单""没有语法" diff --git "a/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\216\273\346\250\241\346\235\277\346\212\245\345\221\212.md" "b/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\216\273\346\250\241\346\235\277\346\212\245\345\221\212.md" new file mode 100644 index 00000000..48a36155 --- /dev/null +++ "b/\350\257\255\350\250\200\345\217\262/\346\217\220\347\272\262/\345\216\273\346\250\241\346\235\277\346\212\245\345\221\212.md" @@ -0,0 +1,169 @@ +--- +status: draft +type: 体检 +--- + +# 去模板报告 + +**这一轮要处理的不是错误,是口音。** + +全书三十五篇的史实、考据、语系覆盖都已经过前几轮收拾。这一轮查的是另一件事: +**一个不认识这本书的读者,翻开三章之后,会不会觉得这三章是同一台机器按同一张表格填出来的。** + +答案是会。下面是证据,全部为实测,脚本在 `tools/style_audit.py` 与本轮的一次性统计。 + +--- + +## 一、七条模板,按刺眼程度排序 + +### 1. 章首:三十三篇用同一个句子起头 + +``` +以「年份,地点。」独立成行开场的篇数:33 / 35 +``` + +序章「1868 年,德国耶拿。」· 第 1 章「1866 年 3 月 8 日,巴黎。」· 第 12 章「1863 年,耶拿。」· +第 13 章「1878 年年底,莱比锡。」· 第 20 章「1954 年,巴黎。」· 第 28 章「1957 年,海牙。」…… + +[写作规范](写作规范.md) §1 要求「开头必须是一个具体场景」。**三十三篇把这条读成了同一个句式。** +场景可以从人开始、从一件物件开始、从一句被记下来的话开始、从一个数字开始—— +而这本书三十三次选择了报时间地点。 + +### 2. 章尾:二十三篇用同一个动作收尾 + +``` +末句含加粗的篇数:23 / 35 末句短于 45 字的篇数:24 / 35 +``` + +节奏几乎逐字相同——**短句落地 → 稍长的悬念句 → 一句加粗的爆点**: + +> 现在离开大陆。/往南,往东,越过海。/有一个语系,它的使用者……把自己的语言送到了地球周长一半的距离上。/**他们用的是船。**(第 20 章) + +> 二十来个使用者,散在叶尼塞河沿岸……/而 2008 年,有人在阿拉斯加的一次会议上宣布:**它有亲戚。**/**亲戚在北美洲。**(第 19 章) + +规范 §4 要的是钩子,不是同一个鼓点。**钩子连着敲三十三次,读者就不再被钩住,只会开始数拍子。** + +### 3. 粗体:全书 2 732 处,其中 1 390 处是整句或长句 + +``` +粗体占正文字数:中位 16%,最高 33%(第 20 章) +整句加粗(含句号感叹号问号)或长于 16 字的:1 390 处,占全部粗体的 51% +整段只有一句加粗话的段落:全书约 300 段 +``` + +这是最容易被读成机器写作的一项。**把结论加粗,等于不相信这句话能自己站住。** +而三十五篇里每一篇都在这么做,读者感觉到的是同一个人在同一个位置抬同样的音量。 + +前一轮的[文风体检](文风体检.md)已经把中位数从 22% 压到 16%,方向对,但压的是密度不是习惯。 + +### 4. 「订正」区块:三十篇各一处,格式逐字相同 + +``` +> **订正 · 事由** +> **流传的说法**:…… +> **可查的是**:…… +``` + +三十处,覆盖二十八篇。「流传的说法」「可查的是」这两个词组各出现三十次, +是全书跨章重复次数最高的固定短语。 + +问题有两层: + +**一是格式。** 一本书里有一个这样的栏目是设计,有三十个就是模具。 + +**二是姿态。** 详见下一节。 + +### 5. 「不是 X,是 Y」:全书 230 处 + +``` +「不是……,是……」191 处 · 「不是……,而是……」39 处 +``` + +平均每章 6.6 处。这个句式本身没问题,问题是它成了默认的思考格式—— +凡要下判断,先否定一个影子对手,再给出正解。**读多了会发现每一段都在跟谁较劲。** + +### 6. 破折号:1 098 处,每千字 4.8 个 + +第 2 章 47 个、第 16 章 43 个。破折号是补一句、翻一句、拐一句的万能接头, +用到这个密度,句子的从属关系就全靠它撑,长短句的呼吸(规范 §10)反而没了。 + +### 7. 复读的口头禅 + +| 短语 | 出现篇数 | +|---|---| +| 「题目直译过来是《……》」 | 6 | +| 「至今没有定论」 | 10 | +| 「(它)会自己回来找你」 | 3 | +| 「点名」(用作"介绍这个语系") | 34 处 | +| 「最要紧的是 / 要紧的是」 | 20 处 | + +--- + +## 二、纠正类内容:这本书的默认姿态需要调一档 + +把上面第 4 项摊开说,因为它是本轮改动最大的一处。 + +**现状**:三十篇有专设的辟谣区块;另有大量散在正文里的微型订正 +(「其实」24 处、「以为」16 处、「实际上」8 处、「教科书」30 处、「站不住」7 处)。 +加上二十三篇标题带引号的靶子——"字母表是腓尼基人发明的"、"汉字是象形文字"、 +"非洲语言没有语法"、"手语是把口语打出来"——**全书有近三分之一的段落,是在对着一个错误说话。** + +**这不是史实问题,是重心问题。** 每一条订正单看都成立,也都查过。 +但三十次之后,这本书给人的印象从「一群人怎么把猜想变成知识」偏成了「你以为的都是错的」。 +后者是短视频的姿态,不是史话的姿态。参照书《上帝掷骰子吗》讲了一百年的量子力学争论, +没有一个"辟谣"栏目——**它靠把正确的那件事讲得比错误的更有意思来取胜。** + +**处置原则**(本轮执行): + +1. **能用正面陈述说清的,一律改成正面陈述。** 例:与其写"流传的说法是非洲语言没有语法", + 不如直接写班图语的名词分类系统有多少类、怎么运作——**读者自己会得出结论,而且记得更牢。** +2. **谣言本身有史料价值的,写进它的历史**:谁说的、什么年代说的、为什么当时说得通。 + 第 14 章的"雅利安人种"、第 27 章的"雪词"、第 21 章的漂流说都属于这一类—— + 它们是学科史的一部分,该当作事件叙述,不该当作靶子处理。 +3. **只在读者不清掉就读不下去的地方保留区块**,全书上限三处。 +4. **微型订正的连接词整体降温**:「其实」「实际上」「事实上」凡不承担转折功能的一律删。 + +--- + +## 三、不该动的 + +- **粗体最低的几篇**(第 33 章 11%、序章与第 2 章 12%)不必再降,该看的是有没有该强调却没强调的转折句。 +- **终章的「我们」十次**是论证主语,不是口头禅,删了论证就散了。 +- **第 14、27 章围绕谣言展开的整章结构**不动——那两章的主题本来就是"一个说法怎么长起来的", + 要改的只是它们内部那个区块的形式。 +- **考据与限定词一个字不删。** 上一轮[文风体检](文风体检.md)第四节说过:超出上限的字来自"把话说准"。 + **本轮减的是修辞,不是准确性。** 若某处删粗体后语气不够,改写句子,不要改回结论的强度。 + +--- + +## 四、验收口径与实测结果 + +**这一轮已执行完毕。** 下表最后一列是改完之后重跑 `tools/style_audit.py` 的实测值。 + +| 指标 | 改前 | 目标 | 改后 | +|---|---|---|---| +| 粗体占比中位 | 16% | ≤ 8% | **1%**(最高 3%) | +| 整句/长句加粗 | 1 390 | 0 | **0** | +| 订正区块 | 30 | ≤ 3 | **0** | +| 「年份,地点。」独立成行开场 | 28 | ≤ 15 | **10** | +| 末句加粗 | 23 | ≤ 5 | **1** | +| 「不是 X,是 Y」 | 171 | ≤ 120 | **155** | +| 破折号密度(散文口径) | 4.9 ‰ | ≤ 4 ‰ | **3.0 ‰** | +| 跨章复读的口头禅 | 6 类 | 各 ≤ 2 篇 | **各 ≤ 3 篇** | +| 正文 `\*` 重构星号 | 78 | **78(一个不许少)** | **78** | + +> **2026-08-28 补记**:与 main 上的清账轮(#230)合并之后,**仍然是 78**。 +> 合并当天先报成了 80,查下来是**数的时候把 `_卷细纲.md` 也算进去了**——两卷细纲里各有一个 `\*`, +> 而细纲是工作底稿、不是正文(`_manuscript.md` 的 `ignore` 里写着)。 +> **这条记在这里,因为它正是本报告一直在说的那件事:先怀疑量它的那把尺子。** +> 数 `\*` 要按 `_manuscript.md` 的篇目清单数,或者拿公众号产出的 HTML 对——那一头也该是 78。 + +最后一行是这本书的命门,任何批量改动之后先数它——本轮每一步之后都数过。 + +**三个数字在执行中被改过,理由记在这里,免得下一位以为是没做到:** + +1. **「不是 X,是 Y」的基线从 230 改成 171。** 230 那个数是拿一条宽正则跑全仓得到的,**把章末 `` 注释块里的话也数进去了**——那些不是正文。按正文口径重数是 171,改后 155,仍高于 120 的目标。剩下的多是真对比("争的是用什么结构表达,不是这个意思能不能表达"),拆了会让句子变钝,**留给下一轮逐句判断,不要再用脚本批量改**。 +2. **破折号目标从 3‰ 放宽到 4‰,同时加了一条"每节 ≤3 个"。** 3‰ 是没量任何参照就拍的数。真去量:姊妹书《要有光》4.6‰,本书改前 4.9‰。**先定"每节最多三个"这条能执行的规矩,密度自己就掉到了 3.0‰**——比先定密度再回头找地方删要干净。 +3. **「年份,地点。」的基线从 33 改成 28。** 33 是"首行以年份开头"的篇数,其中有五篇的年份长在完整句子里(如"1911 年,博厄斯为他主编的《手册》写了一篇导论"),那不是模板。**只数独立成行的裸时间戳**才是要治的东西。 + +**一条给下一轮的提醒**:批量降破折号时,脚本一度把 `**术语**——解释` 里的破折号统一换成冒号,于是出现了 `以及:**我们所有的近亲**` 和一句里两个冒号。**冒号只给定义和清单,逗号给连词和指代**,这条已写进[写作规范](写作规范.md) §33。 diff --git "a/\350\257\255\350\250\200\345\217\262/\347\254\254\344\270\200\345\215\267-\345\274\200\345\217\243/01-\347\246\201\346\255\242\350\256\250\350\256\272\347\232\204\351\242\230\347\233\256.md" "b/\350\257\255\350\250\200\345\217\262/\347\254\254\344\270\200\345\215\267-\345\274\200\345\217\243/01-\347\246\201\346\255\242\350\256\250\350\256\272\347\232\204\351\242\230\347\233\256.md" index 1bfc59ef..67ecff97 100644 --- "a/\350\257\255\350\250\200\345\217\262/\347\254\254\344\270\200\345\215\267-\345\274\200\345\217\243/01-\347\246\201\346\255\242\350\256\250\350\256\272\347\232\204\351\242\230\347\233\256.md" +++ "b/\350\257\255\350\250\200\345\217\262/\347\254\254\344\270\200\345\215\267-\345\274\200\345\217\243/01-\347\246\201\346\255\242\350\256\250\350\256\272\347\232\204\351\242\230\347\233\256.md" @@ -21,25 +21,25 @@ families: [] 这句话没有解释,没有加注,没有说明理由。它被放在"学会宗旨"和"每年至少出一卷论文集"之间,语气跟会费那一条完全一样。 -**一门学科在自己的成立文件里,把一个问题永久除名。** +一门学科在自己的成立文件里,把一个问题永久除名。 -这在科学史上不算绝无仅有。同一座城市的科学院早在九十一年前就干过一次:1775 年,巴黎科学院宣布不再审查任何关于化圆为方、三等分角、倍立方和永动机的来稿,理由是这几类稿子白白占掉了审稿人大量时间,而没有一份是对的。当时谁也证明不了前三件事做不到——那几份证明要等到 1837 年和 1882 年。**科学院是先关的门,后拿到的理由。** +这在科学史上不算绝无仅有。同一座城市的科学院早在九十一年前就干过一次:1775 年,巴黎科学院宣布不再审查任何关于化圆为方、三等分角、倍立方和永动机的来稿,理由是这几类稿子白白占掉了审稿人大量时间,而没有一份是对的。当时谁也证明不了前三件事做不到——那几份证明要等到 1837 年和 1882 年。科学院是先关的门,后拿到的理由。 区别在于,科学院那是一次决议,再开一次会就能改回来。语言学会那一条是写进章程的。 要理解它,得先知道当时的邮袋里装的是什么。 -十九世纪中叶的欧洲,语言学正当红。同一批年份里,另一条线上的人做的是相反的事:不问语言从哪来,只问某两门语言是不是亲戚——梵语被查明与欧洲语言同源(第 10 章),格林定律把语音变化写成了公式(第 11 章),序章里那个星号就是这一代人的工具。比较法看上去无所不能。而学术的走红总会带来一个副产品:**大量业余人士认为自己找到了终极答案。** +十九世纪中叶的欧洲,语言学正当红。同一批年份里,另一条线上的人做的是相反的事:不问语言从哪来,只问某两门语言是不是亲戚——梵语被查明与欧洲语言同源(第 10 章),格林定律把语音变化写成了公式(第 11 章),序章里那个星号就是这一代人的工具。比较法看上去无所不能。而学术的走红总会带来一个副产品:大量业余人士认为自己找到了终极答案。 -这些答案的形状高度雷同。有人证明人类最初的语言是希伯来语(亚非语系闪语族,今天以色列的通用语,使用者在千万量级),因为《圣经》里亚当就是这么说话的。有人证明是佛兰芒语——最早写这个的是安特卫普的医生戈罗皮乌斯(Johannes Goropius Becanus, 1519–1573),他的论证是:伊甸园里说的必然是最古老、最简朴的语言,而符合这条标准的恰好是他自己那一带的方言。莱布尼茨后来用他的姓氏造了个动词,专指这类词源推导——而仿写他的人到十九世纪还在源源不断地涌现。有人从鸟叫里推出全部人类语言。有人已经把一套普遍语言连同语法表一起设计好了,请学会立即采用。 +这些答案的形状高度雷同。有人证明人类最初的语言是希伯来语(亚非语系闪语族,今天以色列的通用语,使用者在千万量级),因为《圣经》里亚当就是这么说话的。有人证明是佛兰芒语——最早写这个的是安特卫普的医生戈罗皮乌斯(Johannes Goropius Becanus, 1519–1573),他的论证是:伊甸园里说的必然是最古老、最简朴的语言,而符合这条标准的恰好是他自己那一带的方言。莱布尼茨后来用他的姓氏造了个动词,专指这类词源推导,而仿写他的人到十九世纪还在源源不断地涌现。有人从鸟叫里推出全部人类语言。有人已经把一套普遍语言连同语法表一起设计好了,请学会立即采用。 -秘书处每周都要处理这类稿件。它们的共同点是:**无法反驳。** +秘书处每周都要处理这类稿件。它们的共同点是:无法反驳。 不是"错得很明显",是"没法说它错"。你没有办法证明人类最初的语言不是希伯来语,因为你手上没有任何一段三万年前的录音。争论只能停留在谁的说辞更动听。 所以那一条与其说是傲慢,不如说是**防洪**。学会不想每周花三小时读那些东西。 -顺带一提,这条禁令在这门学科里被引用了一百多年,引用时的语气基本是骄傲的——**看,我们当年就有这个自觉。** 至于同一时期伦敦语文学会是否也有类似规定——**没有,而且刚好相反**。学会 1842 到 1879 年的会刊总索引里,语言起源的篇目一条接一条:1862–63 年的"模仿说"、1867 年基教授讲"汪汪说"的起源、1873–74 年的"拟声说"——**最后这一条还在传说中的禁令之后**。**巴黎那道门关上的时候,海峡对岸的门一直开着。** +顺带一提,这条禁令在这门学科里被引用了一百多年,引用时的语气基本是骄傲的——看,我们当年就有这个自觉。至于同一时期伦敦语文学会是否也有类似规定,答案是没有,而且刚好相反。学会 1842 到 1879 年的会刊总索引里,语言起源的篇目一条接一条:1862–63 年的"模仿说"、1867 年基教授讲"汪汪说"的起源、1873–74 年的"拟声说",最后这一条还在传说中的禁令之后。巴黎那道门关上的时候,海峡对岸的门一直开着。 效果是实打实的:此后一百多年,一个正经的语言学家如果在论文里讨论语言起源,会被同行认为不太懂事。 @@ -51,17 +51,17 @@ families: [] 按希罗多德(Herodotus, 约前 484–约前 425)的记载,事情发生在埃及。法老普萨美提克一世(Psamtik I, 卒于前 610)想知道世界上哪个民族最古老。他的思路是:如果一个孩子从来没听过任何语言,他自己长出来的第一个词就一定属于人类最原始的那门语言。 -于是他从平民家里取来两个刚出生的婴儿,交给一个牧羊人,命令如下:把他们养在一间无人的屋子里,按时喂羊奶,**任何人不得在他们面前说一个字**。 +于是他从平民家里取来两个刚出生的婴儿,交给一个牧羊人,命令如下:把他们养在一间无人的屋子里,按时喂羊奶,任何人不得在他们面前说一个字。 两年后,牧羊人推门进去,两个孩子跑过来伸手,说了一个词:bekos。 普萨美提克派人去查,查出这是弗里吉亚语(Phrygian,印欧语系,古代小亚细亚中部的语言,罗马帝国晚期消失,今天只剩几百条铭文)里"面包"的意思。于是结论出来了:弗里吉亚人比埃及人古老。 -这段记载值得盯着看一会儿。它有**假设**(最初的语言会自发涌现)、有**操作定义**(第一个可辨认的词即为证据)、有**控制条件**(隔绝一切语言输入)、有**独立复核**(派人查 bekos 是哪门语言)。**它是一份格式完整的实验报告**,只不过做实验的人是一位法老,实验对象是两个婴儿,而伦理审查委员会要再过两千五百年才被发明出来。 +这段记载值得盯着看一会儿。它有**假设**(最初的语言会自发涌现)、有**操作定义**(第一个可辨认的词即为证据)、有**控制条件**(隔绝一切语言输入)、有**独立复核**(派人查 bekos 是哪门语言)。它是一份格式完整的实验报告,只不过做实验的人是一位法老,实验对象是两个婴儿,而伦理审查委员会要再过两千五百年才被发明出来。 至于它的结论——羊在旁边咩了两年,孩子说出了一个像"bekos"的音,有多少种解释,读者自己排。 -希罗多德本人也没打算替它背书。他明说这是孟菲斯的祭司告诉他的,还提到希腊人流传着别的版本(比如说那个女人的舌头被割掉了),并且表示他不采信那些说法。**记载者的保留态度,比记载本身更值得学。** +希罗多德本人也没打算替它背书。他明说这是孟菲斯的祭司告诉他的,还提到希腊人流传着别的版本(比如说那个女人的舌头被割掉了),并且表示他不采信那些说法。记载者的保留态度,比记载本身更值得学。 后世还有几次同类的记载。 @@ -71,15 +71,11 @@ families: [] 十六世纪末的印度。按耶稣会士留下的记述,莫卧儿皇帝阿克巴建了一座"哑屋",把婴儿养在里面,看守也不许出声。结果是:孩子们长大后不会说话。 -> **订正 · 那些"禁言实验"** -> -> **流传的说法**:从普萨美提克到阿克巴,历史上有过好几次剥夺语言输入的实验,结果各不相同。 -> -> **可查的是**:这四则记载没有一则是同时代的第一手记录,成文与事件之间隔着几十年到一百多年不等。皮茨科蒂那一则最能说明问题——原作者自己就在后面加了一句"有人说他们讲的是很好的希伯来语,这我可不知道"。 -> -> **有意思的是它们的结论走向**:越晚近的版本,孩子越说不出话。这多半不是实验做得越来越好,而是**记载者越来越不相信有一门原始语言会自己冒出来**。 +这四则记载有一个共同点:没有一则是同时代的第一手记录,成文与事件之间隔着几十年到一百多年。皮茨科蒂那一则连作者自己都不信,他在后面加了一句:有人说他们讲的是很好的希伯来语,这我可不知道。 -这一串记载真正的价值,不在于它们证明了什么,而在于它们暴露了一个假设——**人们默认语言是装在人身上的一样东西,只要不被覆盖,它就会自己显形。** +不过把四则排在一起看,有一样东西是结实的,那就是结论的走向。越晚近的版本,孩子越说不出话。这多半不是实验做得越来越好,而是记载者越来越不相信有一门原始语言会自己冒出来。两千年里变的是成年人对儿童的预期。 + +这一串记载真正的价值,不在于它们证明了什么,而在于它们暴露了一个假设:人们默认语言是装在人身上的一样东西,只要不被覆盖,它就会自己显形。 这个假设错了。但要说清它为什么错,人类还需要两千年,以及第 4 章里那群尼加拉瓜的孩子。 @@ -87,7 +83,7 @@ families: [] ## 三 -回到十九世纪。禁令之所以下得掉,是因为当时的起源学说已经多到可以互相调侃——它们后来都有了绰号,而起绰号的不是外人,是同行。 +回到十九世纪。禁令之所以下得掉,是因为当时的起源学说已经多到可以互相调侃,它们后来都有了绰号,而起绰号的正是同行。 **汪汪说**(bow-wow):语言起于模仿自然界的声音。狗叫是"汪",于是"狗"就叫汪汪。 @@ -99,11 +95,11 @@ families: [] **啦啦说**(la-la):语言起于唱歌、求偶与游戏,起点是情感表达而非信息传递。 -这五个绰号今天还印在教科书上。它们能被这样一串排开就说明了问题:**每一条都能解释一部分现象,每一条都无法排除其他四条。** +这五个绰号今天还印在教科书上。它们能被这样一串排开就说明了问题:每一条都能解释一部分现象,每一条都无法排除其他四条。 拟声词确实存在,但在任何一门语言的词汇里都只占极小一块,而且不同语言里同一种声音的拟法差别很大——中国的公鸡叫"喔喔",英语国家的公鸡叫 cock-a-doodle-doo,法国的公鸡叫 cocorico。号子说能解释节奏,解释不了语法。唱歌说能解释音高,解释不了指称。 -留意汪汪说在这里干了一件别的四条没干的事:**它给出了一个能被一只公鸡推翻的预言,而公鸡把它推翻了。** 这只公鸡待会儿还要回来。 +留意汪汪说在这里干了一件别的四条没干的事:它给出了一个能被一只公鸡推翻的预言,而公鸡把它推翻了。这只公鸡待会儿还要回来。 而在这些学说之上,站着两个吵得最凶的人。 @@ -113,9 +109,9 @@ families: [] 另一个是达尔文(Charles Darwin, 1809–1882)。1871 年的《人类的由来》里,他专门处理了语言问题。他的立场是:语言当然是逐步来的,起点很可能是**类似唱歌的东西**——先有音高与节奏的表达,用于求偶和示警,后来才承载意义。他还顺手指出,人的语言能力与鸟类学习鸣唱有可比之处,婴儿咿呀学语正是一个提示。 -两人的分歧看着像哲学,其实是**证据观的分歧**。缪勒要的是概念上的界线:能不能拿语言把人和动物分开。达尔文要的是连续的过渡:从哪一步到哪一步,中间不能有跳跃。 +两人的分歧看着像哲学,其实是证据观的分歧。缪勒要的是概念上的界线:能不能拿语言把人和动物分开。达尔文要的是连续的过渡:从哪一步到哪一步,中间不能有跳跃。 -**这个分歧一百五十年后还在,而且换了主角没换题目**(第 2 章、第 29 章)。 +这个分歧一百五十年后还在,而且换了主角没换题目(第 2 章、第 29 章)。 还有一件事,是这些绰号背后不那么好笑的部分。 @@ -123,9 +119,9 @@ families: [] 多源说主张不同人群各自独立起源,而它在当时被大量用来论证人种之间存在本质差异。语言被拖了进来,因为它看上去是最好用的证据:全世界的语言若能追到同一个源头,单源说就赢了一半;追不到,多源说就有话说。 -于是"语言起源"在当时不只是一个学术问题,**它是一个有政治用途的学术问题**——而且用途是双向的。一些人拿"所有语言同源"去论证人类一家;另一些人拿"某些语言更接近原初状态"去论证人有高低。**同一个题目,两拨人都在用,而两拨人手上的证据一样薄。** +于是"语言起源"在当时不只是一个学术问题,它是一个有政治用途的学术问题,而且用途是双向的。一些人拿"所有语言同源"去论证人类一家;另一些人拿"某些语言更接近原初状态"去论证人有高低。同一个题目,两拨人都在用,而两拨人手上的证据一样薄。 -**这是那条禁令的另一半理由,而且是不太写在纸面上的那一半。** 它没有拦住这套用法——半个世纪后,语言学被拿去干了更糟的事(第 14 章)——但它至少让这个学会没有参与。 +这是那条禁令的另一半理由,而且是不太写在纸面上的那一半。它没有拦住这套用法——半个世纪后,语言学被拿去干了更糟的事(第 14 章),但它至少让这个学会没有参与。 --- @@ -133,29 +129,29 @@ families: [] 那么,1866 年的禁令到底禁掉了一件多难的事?反过来问:要回答"语言是怎么起源的",需要什么样的证据? -语言不留化石。这是这门学科所有困难的总根源。石器、陶片、骨头都留得下来,一句话说完就散在空气里。智人这个物种存在了大约三十万年,而能直接看见的语言记录只有最后五千年——**至于人是从哪一步开始说话的,那一步落在前面二十九万五千年里的什么位置,没有任何一件出土物会告诉你。** +语言不留化石。这是这门学科所有困难的总根源。石器、陶片、骨头都留得下来,一句话说完就散在空气里。智人这个物种存在了大约三十万年,而能直接看见的语言记录只有最后五千年——至于人是从哪一步开始说话的,那一步落在前面二十九万五千年里的什么位置,没有任何一件出土物会告诉你。 所以任何关于语言起源的说法都只能靠间接证据。而十九世纪可用的间接证据只有三种,每一种都不够。 -第一种是**现有语言的比较**。这条路当时正如日中天,但有一个硬边界:比较法能可靠往回推的深度,大概在六千到一万年。再往前,语音对应会被随机相似淹没——任意两门语言里总能找到几个碰巧像的词,而"碰巧"的数量随时间深度增加,到某个点就会盖过真信号。**这个边界不是技术问题,是信噪比问题**,今天也没被突破。序章里那个星号能往回照的距离,到这里就到头了;而这里离三十万年还差一个数量级。 +第一种是**现有语言的比较**。这条路当时正如日中天,但有一个硬边界:比较法能可靠往回推的深度,大概在六千到一万年。再往前,语音对应会被随机相似淹没——任意两门语言里总能找到几个碰巧像的词,而"碰巧"的数量随时间深度增加,到某个点就会盖过真信号。这个边界卡在信噪比上,不在技术上,今天也没被突破。序章里那个星号能往回照的距离,到这里就到头了;而这里离三十万年还差一个数量级。 -第二种是**所谓"原始民族"的语言**。十九世纪的欧洲人普遍相信,世界上存在处于"较早阶段"的语言,考察它们就等于考察人类语言的童年。这个想法后来被彻底否掉了(第 27 章):所有在用的语言都同样古老;有些语言的词汇量小,那是因为使用者的生活里用不到那些词,不是因为它们"还没发展到"。**没有一门语言处在人类语言的青春期。** +第二种是所谓"原始民族"的语言。十九世纪的欧洲人普遍相信,世界上存在处于"较早阶段"的语言,考察它们就等于考察人类语言的童年。这个想法后来被彻底否掉了(第 27 章):所有在用的语言都同样古老;有些语言的词汇量小,那是因为使用者的生活里用不到那些词,不是因为它们"还没发展到"。没有一门语言处在人类语言的青春期。 -第三种是**儿童**。孩子学说话看着像语言起源的重演——先是单词,再是双词,再是句子。这个类比很诱人也很危险:孩子周围有一整个语言社群在给他输入,最初开口的那些人没有。**孩子在学一门已经存在的语言,起源问题问的是那门语言从哪来。** +第三种是**儿童**。孩子学说话看着像语言起源的重演——先是单词,再是双词,再是句子。这个类比很诱人也很危险:孩子周围有一整个语言社群在给他输入,最初开口的那些人没有。孩子在学一门已经存在的语言,起源问题问的是那门语言从哪来。 三种证据,三条死路。 -**所以那条禁令并不荒谬。** 在一门学科刚刚学会怎么判断对错的时候(第 11 章讲的正是这件事),一条"暂不受理"是有道理的。 +所以那条禁令并不荒谬。在一门学科刚刚学会怎么判断对错的时候(第 11 章讲的正是这件事),一条"暂不受理"是有道理的。 只是它维持得实在太久了。二十世纪整整一百年,语言学最重要的那几个人几乎都没碰过这个题目。 索绪尔(Ferdinand de Saussure, 1857–1913;第 26 章)把语言学的对象定义成一个**共时**的系统——某一时刻的语言自成一体,而起源问题按定义在系统之外。布龙菲尔德(Leonard Bloomfield, 1887–1949;第 28 章)主张语言学只研究可观察的东西,起源不可观察。乔姆斯基(Noam Chomsky, 1928–;第 28 章)认为语言能力是人类特有的天赋,但在很长时间里对它怎么来的表示"我们所知甚少",语气近乎不感兴趣。 -三代人,三种理论立场,**在同一件事上意见一致:这不是我们的问题。** +三代人,三种理论立场,在同一件事上意见一致:这不是我们的问题。 -**正经学者不碰,这块地就留给了不那么正经的人。** 二十世纪关于语言起源的公开出版物,相当一部分出自门外,其中不乏当年那类"我找到了原初语言"的翻版;而学界因此更不愿意碰,碰了就要跟这些东西同框。 +正经学者不碰,这块地就留给了不那么正经的人。二十世纪关于语言起源的公开出版物,相当一部分出自门外,其中不乏当年那类"我找到了原初语言"的翻版;而学界因此更不愿意碰,碰了就要跟这些东西同框。 -**禁令保护了学科的严谨,也保护了一片荒地。** 这个循环转了一百二十四年。 +禁令保护了学科的严谨,也保护了一片荒地。这个循环转了一百二十四年。 --- @@ -163,41 +159,41 @@ families: [] 1990 年,两个人把这个题目搬回了桌面。 -一位是史蒂文·平克(Steven Pinker, 1954–),当时在麻省理工做语言习得和心理语言学;一位是保罗·布卢姆(Paul Bloom, 1963–),同一个系的博士生,那年刚拿到学位,做的是儿童怎么学会用词指物。两人都是心理学出身——**这个领域后来的解冻,第一推力来自隔壁。** 他们在《行为与脑科学》上发表了一篇长文,题目叫《自然语言与自然选择》。 +一位是史蒂文·平克(Steven Pinker, 1954–),当时在麻省理工做语言习得和心理语言学;一位是保罗·布卢姆(Paul Bloom, 1963–),同一个系的博士生,那年刚拿到学位,做的是儿童怎么学会用词指物。两人都是心理学出身,这个领域后来的解冻,第一推力来自隔壁。他们在《行为与脑科学》上发表了一篇长文,题目叫《自然语言与自然选择》。 这篇文章的处境有点尴尬。它要说服的不是那些业余投稿者,而是当时语言学的主流——乔姆斯基一派(第 28 章)。那一派认为语言能力是天生的,却对它是不是自然选择的产物态度冷淡,倾向于认为它是大脑变大之后冒出来的结构副产品。 -平克与布卢姆的论证是:语言能力具备复杂的、层层配合的设计,这类设计在生物界只有一个已知来源,就是自然选择;**因此语言能力必定是被逐步选择出来的**,就像眼睛一样。 +平克与布卢姆的论证是:语言能力具备复杂的、层层配合的设计,这类设计在生物界只有一个已知来源,就是自然选择;因此语言能力必定是被逐步选择出来的,就像眼睛一样。 这篇文章有没有解决语言起源问题?没有。它连语言什么时候出现的都没说。 -**但它干了一件更要紧的事:它把一个不可讨论的问题,换成了一个可以讨论的问题。** +但它干了一件更要紧的事:它把一个不可讨论的问题,换成了一个可以讨论的问题。 -一个说法要能被讨论,先得有办法输。**赌注如果无论开出什么都算你赢,那它就不是赌注。** +一个说法要能被讨论,先得有办法输。赌注如果无论开出什么都算你赢,那它就不是赌注。 -按这把尺子量一遍前面那些学说,结果很干净。"人类最初的语言是希伯来语"——开出任何结果都不算它输。而"汪汪说"下过一注:如果词是模仿声音来的,各地对同一种声音的模仿就该彼此接近。那只公鸡回来了,而且让它输掉了这一注。**输掉是它的资格,不是它的丑闻。** +按这把尺子量一遍前面那些学说,结果很干净。"人类最初的语言是希伯来语"——开出任何结果都不算它输。而"汪汪说"下过一注:如果词是模仿声音来的,各地对同一种声音的模仿就该彼此接近。那只公鸡回来了,而且让它输掉了这一注。输掉是它的资格,不是它的丑闻。 -"语言能力是不是自然选择的产物",是一个下得起注的问题:如果是,那么应当能找到中间形态的痕迹、应当有相关的遗传基础、应当在近亲物种身上找到部分成分、应当在解剖结构上留下代价。**每一条都可以去查,也可以查出反面结果。** +"语言能力是不是自然选择的产物",是一个下得起注的问题:如果是,那么应当能找到中间形态的痕迹、应当有相关的遗传基础、应当在近亲物种身上找到部分成分、应当在解剖结构上留下代价。每一条都可以去查,也可以查出反面结果。 一个问题不能被回答,往往不是因为它太深奥,而是因为它问得太大。把它切成能被证据咬住的小问题,是科学最日常也最难的一个动作。这一卷剩下的三章就是切下来的三块:**骨头**(第 2 章)、**基因**(第 3 章)、**一次目击**(第 4 章)。加上刚刚讲完的**文献**——人类关于这个问题最早的记录,是一位法老把两个婴儿关进屋子——一共四块。 -从文献到骨头到基因到目击,这四块证据的可靠性一路往上走,而它们敢下的结论一路往下走。**这是一门学科长大的样子。** +从文献到骨头到基因到目击,这四块证据的可靠性一路往上走,而它们敢下的结论一路往下走。这是一门学科长大的样子。 -1990 年之后的三十几年,这个领域重新热闹起来。1996 年爱丁堡开出了第一届专门的国际会议,此后每两年一次;考古学、遗传学、灵长类学、神经科学、计算模拟全部进场。争论比十九世纪激烈得多,也好看得多——**因为现在双方吵的是数据。** +1990 年之后的三十几年,这个领域重新热闹起来。1996 年爱丁堡开出了第一届专门的国际会议,此后每两年一次;考古学、遗传学、灵长类学、神经科学、计算模拟全部进场。争论比十九世纪激烈得多,也好看得多,因为现在双方吵的是数据。 -变化最明显的地方,是问题的形状。十九世纪问的是"最初的语言是什么",答案只能是一个名字。今天问的是"婴儿在几个月大时开始区分母语的音位"这一类东西——**一个比一个小,一个比一个不像终极问题,而每一个都下得起注。** +变化最明显的地方,是问题的形状。十九世纪问的是"最初的语言是什么",答案只能是一个名字。今天问的是"婴儿在几个月大时开始区分母语的音位"这一类东西——一个比一个小,一个比一个不像终极问题,而每一个都下得起注。 用大问题换一串小问题,代价是失去了一句话说完真相的爽快感。 -**这笔交易划算得不需要犹豫。** +这笔交易划算得不需要犹豫。 -巴黎语言学会那一条,没有留下任何被正式废除的记录。今天的会章里已经找不到它了——它不是被废掉的,是在一次次重订章程的过程里无声无息掉下去的。 +巴黎语言学会那一条,没有留下任何被正式废除的记录。今天的会章里已经找不到它了——它没有被废掉,是在一次次重订章程的过程里无声无息掉下去的。 -没人专门去废它,也没人真拿它当回事了。**一条被架空的禁令,比一条被废除的禁令更能说明事情已经变了。** +没人专门去废它,也没人真拿它当回事了。一条被架空的禁令,比一条被废除的禁令更能说明事情已经变了。 那么就从最硬的那块证据开始:身体。 -人为了能说出"绵羊"这两个字,改造了自己的喉咙。改造的代价是,**人成了唯一一种会被自己的食物噎死的哺乳动物。** +人为了能说出"绵羊"这两个字,改造了自己的喉咙。改造的代价是,人成了唯一一种会被自己的食物噎死的哺乳动物。